@craftercms/studio-ui
Version:
Services, components, models & utils to build CrafterCMS authoring extensions.
328 lines (326 loc) • 16.2 kB
JavaScript
/*
* 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}`);
}