2022-10-20 08:34:38 +00:00
|
|
|
import {makeT} from 'app/client/lib/localization';
|
2021-07-28 19:02:06 +00:00
|
|
|
import {HomeModel} from 'app/client/models/HomeModel';
|
2022-06-03 14:58:07 +00:00
|
|
|
import {productPill} from 'app/client/ui/AppHeader';
|
2020-10-02 15:10:00 +00:00
|
|
|
import * as css from 'app/client/ui/DocMenuCss';
|
2024-09-12 17:10:55 +00:00
|
|
|
import {buildHomeIntroCards} from 'app/client/ui/HomeIntroCards';
|
2024-09-17 01:01:58 +00:00
|
|
|
import {newDocMethods} from 'app/client/ui/NewDocMethods';
|
2024-09-12 17:10:55 +00:00
|
|
|
import {bigBasicButton} from 'app/client/ui2018/buttons';
|
2022-09-06 01:51:57 +00:00
|
|
|
import {testId, theme, vars} from 'app/client/ui2018/cssVars';
|
2020-10-02 15:10:00 +00:00
|
|
|
import {icon} from 'app/client/ui2018/icons';
|
2024-09-12 17:10:55 +00:00
|
|
|
import {menu, menuCssClass} from 'app/client/ui2018/menus';
|
|
|
|
import {toggleSwitch} from 'app/client/ui2018/toggleSwitch';
|
2022-06-03 14:58:07 +00:00
|
|
|
import {FullUser} from 'app/common/LoginSessionAPI';
|
|
|
|
import * as roles from 'app/common/roles';
|
2024-09-12 17:10:55 +00:00
|
|
|
import {dom, DomContents, styled} from 'grainjs';
|
|
|
|
import {defaultMenuOptions} from 'popweasel';
|
2020-10-02 15:10:00 +00:00
|
|
|
|
2022-10-28 16:11:08 +00:00
|
|
|
const t = makeT('HomeIntro');
|
2022-06-07 21:14:35 +00:00
|
|
|
|
2020-10-02 15:10:00 +00:00
|
|
|
export function buildHomeIntro(homeModel: HomeModel): DomContents {
|
|
|
|
const user = homeModel.app.currentValidUser;
|
2022-08-03 10:35:45 +00:00
|
|
|
const isAnonym = !user;
|
|
|
|
const isPersonal = !homeModel.app.isTeamSite;
|
|
|
|
if (isAnonym) {
|
2022-06-03 14:58:07 +00:00
|
|
|
return makeAnonIntro(homeModel);
|
2022-08-03 10:35:45 +00:00
|
|
|
} else if (isPersonal) {
|
|
|
|
return makePersonalIntro(homeModel, user);
|
2024-09-12 17:10:55 +00:00
|
|
|
} else {
|
|
|
|
return makeTeamSiteIntro(homeModel);
|
2020-10-02 15:10:00 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-07 09:52:40 +00:00
|
|
|
export function buildWorkspaceIntro(homeModel: HomeModel): DomContents {
|
|
|
|
const isViewer = homeModel.currentWS.get()?.access === roles.VIEWER;
|
|
|
|
const isAnonym = !homeModel.app.currentValidUser;
|
2024-09-12 17:10:55 +00:00
|
|
|
const emptyLine = css.introLine(testId('empty-workspace-info'), t("This workspace is empty."));
|
2022-09-07 09:52:40 +00:00
|
|
|
if (isAnonym || isViewer) {
|
|
|
|
return emptyLine;
|
|
|
|
} else {
|
|
|
|
return [
|
|
|
|
emptyLine,
|
2024-09-12 17:10:55 +00:00
|
|
|
cssBtnGroup(
|
|
|
|
cssBtn(cssBtnIcon('Import'), t("Import Document"), testId('intro-import-doc'),
|
|
|
|
dom.on('click', () => newDocMethods.importDocAndOpen(homeModel)),
|
|
|
|
),
|
|
|
|
cssBtn(cssBtnIcon('Page'), t("Create Empty Document"), testId('intro-create-doc'),
|
|
|
|
dom.on('click', () => newDocMethods.createDocAndOpen(homeModel)),
|
|
|
|
),
|
|
|
|
),
|
2022-09-07 09:52:40 +00:00
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-03 14:58:07 +00:00
|
|
|
function makeTeamSiteIntro(homeModel: HomeModel) {
|
|
|
|
return [
|
2024-09-12 17:10:55 +00:00
|
|
|
css.docListHeaderWrap(
|
|
|
|
cssHeader(
|
|
|
|
t("Welcome to {{- orgName}}", {orgName: homeModel.app.currentOrgName}),
|
|
|
|
productPill(homeModel.app.currentOrg, {large: true}),
|
|
|
|
testId('welcome-title')
|
|
|
|
),
|
|
|
|
buildPreferencesMenu(homeModel),
|
2022-08-03 10:35:45 +00:00
|
|
|
),
|
2024-09-12 17:10:55 +00:00
|
|
|
dom.create(buildHomeIntroCards, {homeModel}),
|
2022-06-03 14:58:07 +00:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
function makePersonalIntro(homeModel: HomeModel, user: FullUser) {
|
|
|
|
return [
|
2024-09-12 17:10:55 +00:00
|
|
|
css.docListHeaderWrap(
|
|
|
|
cssHeader(
|
|
|
|
t("Welcome to Grist, {{- name}}!", {name: user.name}),
|
|
|
|
testId('welcome-title'),
|
|
|
|
),
|
|
|
|
buildPreferencesMenu(homeModel),
|
2022-06-07 21:14:35 +00:00
|
|
|
),
|
2024-09-12 17:10:55 +00:00
|
|
|
dom.create(buildHomeIntroCards, {homeModel}),
|
2022-06-03 14:58:07 +00:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
function makeAnonIntro(homeModel: HomeModel) {
|
2024-09-12 17:10:55 +00:00
|
|
|
const welcomeToGrist = css.docListHeaderWrap(
|
|
|
|
cssHeader(
|
|
|
|
t("Welcome to Grist!"),
|
|
|
|
testId('welcome-title'),
|
|
|
|
),
|
|
|
|
);
|
2023-09-08 13:05:52 +00:00
|
|
|
|
2024-09-12 17:10:55 +00:00
|
|
|
return cssIntro(
|
2023-09-08 13:05:52 +00:00
|
|
|
welcomeToGrist,
|
2024-09-12 17:10:55 +00:00
|
|
|
dom.create(buildHomeIntroCards, {homeModel}),
|
|
|
|
);
|
2022-06-03 14:58:07 +00:00
|
|
|
}
|
|
|
|
|
2024-09-12 17:10:55 +00:00
|
|
|
function buildPreferencesMenu(homeModel: HomeModel) {
|
|
|
|
const {onlyShowDocuments} = homeModel;
|
|
|
|
|
|
|
|
return cssDotsMenu(
|
|
|
|
cssDots(icon('Dots')),
|
|
|
|
menu(
|
|
|
|
() => [
|
|
|
|
toggleSwitch(onlyShowDocuments, {
|
|
|
|
label: t('Only show documents'),
|
|
|
|
args: [
|
|
|
|
testId('welcome-menu-only-show-documents'),
|
|
|
|
],
|
|
|
|
}),
|
|
|
|
],
|
|
|
|
{
|
|
|
|
...defaultMenuOptions,
|
|
|
|
menuCssClass: `${menuCssClass} ${cssPreferencesMenu.className}`,
|
|
|
|
placement: 'bottom-end',
|
|
|
|
}
|
2020-10-02 15:10:00 +00:00
|
|
|
),
|
2024-09-12 17:10:55 +00:00
|
|
|
testId('welcome-menu'),
|
2020-10-02 15:10:00 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2024-09-12 17:10:55 +00:00
|
|
|
const cssIntro = styled('div', `
|
|
|
|
margin-bottom: 24px;
|
2020-10-02 15:10:00 +00:00
|
|
|
`);
|
|
|
|
|
2024-09-12 17:10:55 +00:00
|
|
|
const cssHeader = styled(css.listHeader, `
|
|
|
|
font-size: 24px;
|
|
|
|
line-height: 36px;
|
2022-06-03 14:58:07 +00:00
|
|
|
`);
|
|
|
|
|
2020-10-02 15:10:00 +00:00
|
|
|
const cssBtnGroup = styled('div', `
|
|
|
|
display: inline-flex;
|
|
|
|
flex-direction: column;
|
|
|
|
align-items: stretch;
|
|
|
|
`);
|
|
|
|
|
|
|
|
const cssBtn = styled(bigBasicButton, `
|
2022-06-03 14:58:07 +00:00
|
|
|
display: flex;
|
|
|
|
align-items: center;
|
2020-10-02 15:10:00 +00:00
|
|
|
margin-right: 16px;
|
|
|
|
margin-top: 16px;
|
|
|
|
text-align: left;
|
|
|
|
`);
|
|
|
|
|
|
|
|
const cssBtnIcon = styled(icon, `
|
|
|
|
margin-right: 8px;
|
|
|
|
`);
|
|
|
|
|
2024-09-12 17:10:55 +00:00
|
|
|
const cssPreferencesMenu = styled('div', `
|
|
|
|
padding: 10px 16px;
|
|
|
|
`);
|
|
|
|
|
|
|
|
const cssDotsMenu = styled('div', `
|
|
|
|
display: flex;
|
|
|
|
cursor: pointer;
|
|
|
|
border-radius: ${vars.controlBorderRadius};
|
|
|
|
|
|
|
|
&:hover, &.weasel-popup-open {
|
|
|
|
background-color: ${theme.hover};
|
|
|
|
}
|
|
|
|
`);
|
|
|
|
|
|
|
|
const cssDots = styled('div', `
|
|
|
|
--icon-color: ${theme.lightText};
|
|
|
|
padding: 8px;
|
2022-06-03 14:58:07 +00:00
|
|
|
`);
|