mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
4740f1f933
Summary: A new onboarding page is now shown to all new users visiting the doc menu for the first time. Tutorial cards on the doc menu have been replaced with a new version that tracks completion progress, alongside a new card that opens the orientation video. Test Plan: Browser tests. Reviewers: jarek Reviewed By: jarek Differential Revision: https://phab.getgrist.com/D4296
48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import {HomeModel} from 'app/client/models/HomeModel';
|
|
|
|
export function attachAddNewTip(home: HomeModel): (el: Element) => void {
|
|
return () => {
|
|
if (shouldShowAddNewTip(home)) {
|
|
showAddNewTip(home);
|
|
}
|
|
};
|
|
}
|
|
|
|
function shouldShowAddNewTip(home: HomeModel): boolean {
|
|
return (
|
|
// Only show if the user is an owner or editor.
|
|
home.app.isOwnerOrEditor() &&
|
|
// And the tip hasn't been shown before.
|
|
home.shouldShowAddNewTip.get() &&
|
|
// And the intro isn't being shown.
|
|
!home.showIntro.get() &&
|
|
// And the workspace loaded correctly.
|
|
home.available.get() &&
|
|
// And the current page isn't /p/trash; the Add New button is limited there.
|
|
home.currentPage.get() !== 'trash'
|
|
);
|
|
}
|
|
|
|
function showAddNewTip(home: HomeModel): void {
|
|
const addNewButton = document.querySelector('.behavioral-prompt-add-new');
|
|
if (!addNewButton) {
|
|
console.warn('AddNewTip failed to find Add New button');
|
|
return;
|
|
}
|
|
if (!isVisible(addNewButton as HTMLElement)) {
|
|
return;
|
|
}
|
|
|
|
home.app.behavioralPromptsManager.showPopup(addNewButton, 'addNew', {
|
|
popupOptions: {
|
|
placement: 'right-start',
|
|
},
|
|
onDispose: () => home.shouldShowAddNewTip.set(false),
|
|
});
|
|
}
|
|
|
|
function isVisible(element: HTMLElement): boolean {
|
|
// From https://github.com/jquery/jquery/blob/c66d4700dcf98efccb04061d575e242d28741223/src/css/hiddenVisibleSelectors.js.
|
|
return Boolean(element.offsetWidth || element.offsetHeight || element.getClientRects().length);
|
|
}
|