UNPKG

@craftercms/studio-ui

Version:

Services, components, models & utils to build CrafterCMS authoring extensions.

328 lines (326 loc) 16.2 kB
/* * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* * Copyright (C) 2007-2022 Crafter Software Corporation. All Rights Reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 3 as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import { nanoid as uuid } from 'nanoid'; export function setStoredGlobalMenuSiteViewPreference(value, user) { window.localStorage.setItem(`craftercms.${user}.globalMenuSiteViewPreference`, value); } export function getStoredGlobalMenuSiteViewPreference(user) { return window.localStorage.getItem(`craftercms.${user}.globalMenuSiteViewPreference`); } export function removeStoredGlobalMenuSiteViewPreference(user) { window.localStorage.removeItem(`craftercms.${user}.globalMenuSiteViewPreference`); } export function getStateMapFromLegacyItem(item) { return { new: item.isNew, modified: item.isInProgress, deleted: Boolean(item.isDeleted), locked: Boolean(item.lockOwner), systemProcessing: false, submitted: Boolean(item.isSubmitted), scheduled: Boolean(item.isScheduled), publishing: false, submittedToStaging: item.submittedToEnvironment === 'staging', submittedToLive: item.submittedToEnvironment === 'live', staged: item.isStaged, live: item.isLive, disabled: item.disabled, translationInProgress: false, translationPending: false, translationUpToDate: false }; } export function setStoredEditModeChoice(value, user, siteIdentifier) { window.localStorage.setItem(`craftercms.${user}.editModeChoice.${siteIdentifier}`, value); } export function getStoredEditModeChoice(user, siteIdentifier) { const value = window.localStorage.getItem(`craftercms.${user}.editModeChoice.${siteIdentifier}`); return value ? value === 'true' : null; } export function removeStoredEditModeChoice(user, siteIdentifier) { window.localStorage.removeItem(`craftercms.${user}.editModeChoice.${siteIdentifier}`); } export function setStoredHighlightModeChoice(value, user, siteIdentifier) { window.localStorage.setItem(`craftercms.${user}.highlightModeChoice.${siteIdentifier}`, value); } export function getStoredHighlightModeChoice(user, siteIdentifier) { return window.localStorage.getItem(`craftercms.${user}.highlightModeChoice.${siteIdentifier}`); } export function removeStoredHighlightModeChoice(user, siteIdentifier) { window.localStorage.removeItem(`craftercms.${user}.highlightModeChoice.${siteIdentifier}`); } export function setStoredEditModePadding(value, user) { window.localStorage.setItem(`craftercms.${user}.editModePadding`, value); } export function getStoredEditModePadding(user) { const value = window.localStorage.getItem(`craftercms.${user}.editModePadding`); return value ? value === 'true' : null; } export function removeStoredEditModePadding(user) { window.localStorage.removeItem(`craftercms.${user}.editModePadding`); } export function setStoredClipboard(siteIdentifier, user, value) { window.localStorage.setItem( `craftercms.${user}.clipboard.${siteIdentifier}`, JSON.stringify({ ...value, timestamp: Date.now() }) ); } export function getStoredClipboard(siteIdentifier, user) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.clipboard.${siteIdentifier}`)); } export function removeStoredClipboard(siteIdentifier, user) { return window.localStorage.removeItem(`craftercms.${user}.clipboard.${siteIdentifier}`); } export function setStoredPreviewToolsPanelPage(siteIdentifier, user, value) { window.localStorage.setItem(`craftercms.${user}.previewToolsPanelPage.${siteIdentifier}`, JSON.stringify(value)); } export function getStoredPreviewToolsPanelPage(siteIdentifier, user) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.previewToolsPanelPage.${siteIdentifier}`)); } export function removeStoredPreviewToolsPanelPage(siteIdentifier, user) { return window.localStorage.removeItem(`craftercms.${user}.previewToolsPanelPage.${siteIdentifier}`); } export function setStoredPathNavigator(siteIdentifier, user, id, value) { window.localStorage.setItem(`craftercms.${user}.pathNavigator.${siteIdentifier}.${id}`, JSON.stringify(value)); } export function getStoredPathNavigator(siteIdentifier, user, id) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.pathNavigator.${siteIdentifier}.${id}`)); } export function removeStoredPathNavigator(siteIdentifier, user, id) { window.localStorage.removeItem(`craftercms.${user}.pathNavigator.${siteIdentifier}.${id}`); } export function setStoredPathNavigatorTree(siteIdentifier, user, id, value) { window.localStorage.setItem(`craftercms.${user}.pathNavigatorTree.${siteIdentifier}.${id}`, JSON.stringify(value)); } export function getStoredPathNavigatorTree(siteIdentifier, user, id) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.pathNavigatorTree.${siteIdentifier}.${id}`)); } export function removeStoredPathNavigatorTree(siteIdentifier, user, id) { window.localStorage.removeItem(`craftercms.${user}.pathNavigatorTree.${siteIdentifier}.${id}`); } export function setStoredGlobalAppOpenSidebar(user, value) { window.localStorage.setItem(`craftercms.${user}.globalAppOpenSidebar`, JSON.stringify(value)); } export function getStoredGlobalAppOpenSidebar(user) { return window.localStorage.getItem(`craftercms.${user}.globalAppOpenSidebar`); } export function removeStoredGlobalAppOpenSidebar(user) { window.localStorage.removeItem(`craftercms.${user}.globalAppOpenSidebar`); } export function createToolsPanelPage(title, widgets, target) { return createWidgetDescriptor({ id: 'craftercms.components.ToolsPanelPage', configuration: { title, target, widgets } }); } export function createWidgetDescriptor(widget) { return { ...widget, // When rendering widgets dynamically and changing pages on the tools panel, if there are duplicate react key // props across pages, react may no swap the components correctly, incurring in unexpected behaviours. // We need a unique key for each widget. uiKey: uuid() }; } export function setStoredDashboardPreferences(value, user, siteIdentifier, dashletId) { window.localStorage.setItem(`craftercms.dashboard.${dashletId}.${siteIdentifier}.${user}`, JSON.stringify(value)); } export function getStoredDashboardPreferences(user, siteIdentifier, dashletId) { return JSON.parse(window.localStorage.getItem(`craftercms.dashboard.${dashletId}.${siteIdentifier}.${user}`)); } export function removeStoredDashboardPreferences(user, siteIdentifier, dashletId) { window.localStorage.removeItem(`craftercms.dashboard.${dashletId}.${siteIdentifier}.${user}`); } export function setStoredLegacyComponentPanel(value, user) { window.localStorage.setItem(`craftercms.${user}.legacyComponentPanel`, JSON.stringify(value)); } export function getStoredLegacyComponentPanel(user) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.legacyComponentPanel`)); } export function removeStoredLegacyComponentPanel(user) { window.localStorage.removeItem(`craftercms.${user}.legacyComponentPanel`); } export function setStoredShowToolsPanel(siteIdentifier, user, value) { window.localStorage.setItem(`craftercms.${user}.openToolsPanel.${siteIdentifier}`, JSON.stringify(value)); } export function getStoredShowToolsPanel(siteIdentifier, user) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.openToolsPanel.${siteIdentifier}`)); } export function removeStoredShowToolsPanel(siteIdentifier, user) { window.localStorage.removeItem(`craftercms.${user}.openToolsPanel.${siteIdentifier}`); } export function setStoredPreviewToolsPanelWidth(siteIdentifier, user, value) { window.localStorage.setItem(`craftercms.${user}.previewToolsPanelWidth.${siteIdentifier}`, value.toString()); } export function getStoredPreviewToolsPanelWidth(siteIdentifier, user) { const value = window.localStorage.getItem(`craftercms.${user}.previewToolsPanelWidth.${siteIdentifier}`); return value === null ? value : parseInt(value); } export function removeStoredPreviewToolsPanelWidth(siteIdentifier, user) { window.localStorage.removeItem(`craftercms.${user}.previewToolsPanelWidth.${siteIdentifier}`); } export function setStoredICEToolsPanelWidth(siteIdentifier, user, value) { window.localStorage.setItem(`craftercms.${user}.iceToolsPanelWidth.${siteIdentifier}`, value.toString()); } export function getStoredICEToolsPanelWidth(siteIdentifier, user) { const value = window.localStorage.getItem(`craftercms.${user}.iceToolsPanelWidth.${siteIdentifier}`); return value === null ? value : parseInt(value); } export function removeStoredICEToolsPanelWidth(siteIdentifier, user) { window.localStorage.removeItem(`craftercms.${user}.iceToolsPanelWidth.${siteIdentifier}`); } export function setStoredICEToolsPanelPage(siteIdentifier, user, value) { window.localStorage.setItem(`craftercms.${user}.ICEToolsPanel.${siteIdentifier}`, JSON.stringify(value)); } export function getStoredICEToolsPanelPage(siteIdentifier, user) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.ICEToolsPanel.${siteIdentifier}`)); } export function removeStoredICEToolsPanelPage(siteIdentifier, user) { window.localStorage.removeItem(`craftercms.${user}.ICEToolsPanel.${siteIdentifier}`); } export function commonDialogProps(specificProps) { return { open: false, isSubmitting: null, isMinimized: null, hasPendingChanges: null, ...specificProps }; } export function setStoredSaveButtonSubAction(user, id, value) { window.localStorage.setItem(`craftercms.${user}.saveButtonSubAction.${id}`, value); } export function getStoredSaveButtonSubAction(user, id) { return window.localStorage.getItem(`craftercms.${user}.saveButtonSubAction.${id}`); } export function removeStoredSaveButtonSubAction(user, id) { window.localStorage.removeItem(`craftercms.${user}.saveButtonSubAction.${id}`); } export function setStoredPushBranch(siteId, username, branchName) { localStorage.setItem(`craftercms.${username}.${siteId}.pushBranch`, branchName); } export function getStoredPushBranch(siteId, username) { return localStorage.getItem(`craftercms.${username}.${siteId}.pushBranch`); } export function removeStoredPushBranch(siteId, username) { localStorage.removeItem(`craftercms.${username}.${siteId}.pushBranch`); } export function setStoredPullBranch(siteId, username, branchName) { localStorage.setItem(`craftercms.${username}.${siteId}.pullBranch`, branchName); } export function getStoredPullBranch(siteId, username) { return localStorage.getItem(`craftercms.${username}.${siteId}.pullBranch`); } export function removeStoredPullBranch(siteId, username) { localStorage.removeItem(`craftercms.${username}.${siteId}.pullBranch`); } export function setStoredPullMergeStrategy(siteId, username, mergeStrategy) { localStorage.setItem(`craftercms.${username}.${siteId}.pullMergeStrategy`, mergeStrategy); } export function getStoredPullMergeStrategy(siteId, username) { return localStorage.getItem(`craftercms.${username}.${siteId}.pullMergeStrategy`); } export function removeStoredPullMergeStrategy(siteId, username) { localStorage.removeItem(`craftercms.${username}.${siteId}.pullMergeStrategy`); } export function setStoredPreviewBackgroundMode(username, mode) { localStorage.setItem(`craftercms.${username}.previewDialog.backgroundMode`, JSON.stringify(mode)); } export function getStoredPreviewBackgroundMode(username) { return JSON.parse(localStorage.getItem(`craftercms.${username}.previewDialog.backgroundMode`)); } export function removeStoredPreviewBackgroundMode(username) { localStorage.removeItem(`craftercms.${username}.previewDialog.backgroundMode`); } export function setStoredBrowseDialogViewMode(username, mode) { // TODO: Remove the item removal for old key in later versions. const oldKey = `craftercms.${username}.browseDialog.compactMode`; if (localStorage.getItem(oldKey)) { localStorage.removeItem(oldKey); } localStorage.setItem(`craftercms.${username}.browseDialog.viewMode`, mode); } export function getStoredBrowseDialogViewMode(username) { // The viewMode field used to be compactMode (boolean). For backwards compatibility, if the viewMode is not set and // compactMode exists, set value accordingly. // TODO: Remove compactMode in later versions. const compactMode = JSON.parse(localStorage.getItem(`craftercms.${username}.browseDialog.compactMode`)); const backwardsCompatibilityValue = compactMode ? 'compact' : 'card'; return localStorage.getItem(`craftercms.${username}.browseDialog.viewMode`) ?? backwardsCompatibilityValue; } export function removeStoredBrowseDialogViewMode(username) { // TODO: Remove oldKey removal in later versions. localStorage.removeItem(`craftercms.${username}.browseDialog.compactMode`); localStorage.removeItem(`craftercms.${username}.browseDialog.viewMode`); } export function getStoredOutdatedXBValidationDate(siteId, username) { const dateString = localStorage.getItem(`craftermcs.${username}.${siteId}.outdatedXBValidationDate`); return dateString ? new Date(dateString) : null; } export function setStoredOutdatedXBValidationDate(siteId, username, date) { const dateString = date.toDateString(); localStorage.setItem(`craftermcs.${username}.${siteId}.outdatedXBValidationDate`, dateString); } export function removeStoredOutdatedXBValidationDate(siteId, username) { localStorage.removeItem(`craftermcs.${username}.${siteId}.outdatedXBValidationDate`); } // Gets the stored list of system type groups used by a dashlet (identified by storageKey) for filtering export function getDashletFilterSystemTypeGroups(siteIdentifier, storageKey) { const typeGroups = localStorage.getItem(`craftercms.${siteIdentifier}.${storageKey}.dashletFilterTypeGroups`); return typeGroups?.split(','); } // Stores a list of system group types (from where we retrieve the system types) for dashlet filtering. export function setDashletFilterSystemTypeGroups(siteIdentifier, storageKey, typeGroups) { localStorage.setItem(`craftercms.${siteIdentifier}.${storageKey}.dashletFilterTypeGroups`, typeGroups.join(',')); } export function removeDashletFilterSystemTypeGroups(siteIdentifier, storageKey) { localStorage.removeItem(`craftercms.${siteIdentifier}.${storageKey}.dashletFilterTypeGroups`); } export function removeStoredItems(match) { Object.keys(localStorage) .filter((key) => match(key)) .forEach((key) => { localStorage.removeItem(key); }); } export function getStoredWidgetsAccordion(siteIdentifier, user, id) { return JSON.parse(window.localStorage.getItem(`craftercms.${user}.widgetsAccordion.${siteIdentifier}.${id}`)); } export function setStoredWidgetsAccordion(siteIdentifier, user, id, value) { window.localStorage.setItem(`craftercms.${user}.widgetsAccordion.${siteIdentifier}.${id}`, JSON.stringify(value)); } export function removeStoredWidgetsAccordion(siteIdentifier, user, id) { window.localStorage.removeItem(`craftercms.${user}.widgetsAccordion.${siteIdentifier}.${id}`); }