UNPKG

@craftercms/studio-ui

Version:

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

292 lines (290 loc) 10.6 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/>. */ import { LookupTable } from './LookupTable'; import { EnhancedUser } from './User'; import { Site } from './Site'; import ContentType from './ContentType'; import { WidthAndHeight } from './WidthAndHeight'; import { ElasticParams, MediaItem } from './Search'; import ContentInstance from './ContentInstance'; import { ContentTypeDropTarget } from './ContentTypeDropTarget'; import { ErrorDialogStateProps } from '../components/ErrorDialog/ErrorDialog'; import { MinimizedDialogsStateProps } from './MinimizedTab'; import { NewContentDialogStateProps } from '../components/NewContentDialog/utils'; import { EntityState } from './EntityState'; import { ApiResponse } from './ApiResponse'; import { VersionsStateProps } from './Version'; import QuickCreateItem from './content/QuickCreateItem'; import { PathNavigatorStateProps } from '../components/PathNavigator'; import { DetailedItem } from './Item'; import { CopyDialogStateProps } from '../components/CopyDialog/utils'; import { PathSelectionDialogStateProps } from '../components/PathSelectionDialog/PathSelectionDialog'; import { WidgetDescriptor } from './WidgetDescriptor'; import { ItemMenuStateProps } from '../components/ItemActionsMenu'; import { ItemMegaMenuStateProps } from '../components/ItemMegaMenu'; import { LauncherStateProps } from '../components/Launcher'; import { PublishingStatusDialogStateProps } from '../components/PublishingStatusDialog'; import { SystemIconDescriptor } from '../components/SystemIcon'; import { AjaxError } from 'rxjs/ajax'; import { PathNavigatorTreeStateProps } from '../components/PathNavigatorTree'; import { UnlockPublisherDialogStateProps } from '../components/UnlockPublisherDialog'; import { WidgetDialogStateProps } from '../components/WidgetDialog/utils'; import { CodeEditorDialogStateProps } from '../components/CodeEditorDialog/utils'; import { PublishDialogStateProps } from '../components/PublishDialog/utils'; import { DeleteDialogStateProps } from '../components/DeleteDialog/utils'; import { CreateFolderStateProps } from '../components/CreateFolderDialog/utils'; import { DependenciesDialogStateProps } from '../components/DependenciesDialog/utils'; import { HistoryDialogStateProps } from '../components/HistoryDialog/utils'; import { ViewVersionDialogStateProps } from '../components/ViewVersionDialog/utils'; import { CompareVersionsDialogStateProps } from '../components/CompareVersionsDialog/utils'; import { ConfirmDialogStateProps } from '../components/ConfirmDialog/utils'; import { ChangeContentTypeDialogStateProps } from '../components/ChangeContentTypeDialog/utils'; import { WorkflowCancellationDialogStateProps } from '../components/WorkflowCancellationDialog/utils'; import { RejectDialogStateProps } from '../components/RejectDialog/utils'; import { CreateFileStateProps } from '../components/CreateFileDialog/utils'; import { UploadDialogStateProps } from '../components/UploadDialog/util'; import { PreviewDialogStateProps } from '../components/PreviewDialog/utils'; import { EditSiteDialogStateProps } from '../components/EditSiteDialog/utils'; import { LegacyFormDialogStateProps } from '../components/LegacyFormDialog/utils'; import { SingleFileUploadDialogStateProps } from '../components/SingleFileUploadDialog'; import { ModelHierarchyMap } from '../utils/content'; import { UIBlockerStateProps } from '../components/UIBlocker'; import { RenameAssetStateProps } from '../components/RenameAssetDialog'; import Person from './Person'; import { BrokenReferencesDialogStateProps } from '../components/BrokenReferencesDialog/types'; import AllowedContentTypesData from './AllowedContentTypesData'; import type { FolderMoveAlertDialogStateProps } from '../components/FolderMoveAlert/FolderMoveAlertDialog'; export type HighlightMode = 'all' | 'move'; export interface PagedEntityState<T = any> extends EntityState<T> { page: any; pageNumber: number; count: number; query: ElasticParams; } export interface EditSelection { modelId: string; fieldId: string[]; index: string | number; coordinates: { x: number; y: number; }; } export interface GuestData { url: string; origin: string; models: LookupTable<ContentInstance>; hierarchyMap: ModelHierarchyMap; modelIdByPath: LookupTable<string>; modelId: string; path: string; selected: EditSelection[]; itemBeingDragged: number; /** * Stores the modifier person for the main XB model from the moment is loaded (guest check's in) onwards. * used to determine if the content item was modified in the background and it editing should be disabled. */ mainModelModifier: Person; allowedContentTypes: LookupTable<AllowedContentTypesData>; contentTypesUpdated: boolean; } export interface Clipboard { type: 'CUT' | 'COPY'; paths?: string[]; sourcePath: string; } export interface GlobalState { auth: { error: ApiResponse; active: boolean; expiresAt: number; isFetching: boolean; }; user: EnhancedUser; sites: { active: string; isFetching: boolean; byId: LookupTable<Site>; }; content: { quickCreate: { error: ApiResponse; isFetching: boolean; items: QuickCreateItem[]; }; itemsByPath: LookupTable<DetailedItem>; clipboard: Clipboard; itemsBeingFetchedByPath: LookupTable<boolean>; }; contentTypes: EntityState<ContentType>; env: { authoringBase: string; logoutUrl: string; guestBase: string; xsrfHeader: string; xsrfArgument: string; siteCookieName: string; previewLandingBase: string; version: string; packageBuild: string; packageVersion: string; packageBuildDate: string; useBaseDomain: boolean; activeEnvironment: string; socketConnected: boolean; }; preview: { editMode: boolean; highlightMode: HighlightMode; showToolsPanel: boolean; toolsPanelPageStack: WidgetDescriptor[]; toolsPanelWidth: number; icePanelWidth: number; icePanelStack: WidgetDescriptor[]; hostSize: WidthAndHeight; guest: GuestData; assets: PagedEntityState<MediaItem>; audiencesPanel: { isFetching: boolean; isApplying: boolean; error: ApiResponse; model: ContentInstance; applied: boolean; }; components: PagedEntityState<ContentInstance>; dropTargets: { selectedContentType: string; byId: LookupTable<ContentTypeDropTarget>; }; toolsPanel: { widgets: WidgetDescriptor[]; }; toolbar: { leftSection: { widgets: WidgetDescriptor[]; }; middleSection: { widgets: WidgetDescriptor[]; }; rightSection: { widgets: WidgetDescriptor[]; }; }; icePanel: { widgets: WidgetDescriptor[]; }; richTextEditor: LookupTable; editModePadding: boolean; windowSize: number; xbDetectionTimeoutMs: number; error: { code: number; message: string; }; }; previewNavigation: { currentUrlPath: string; historyBackStack: string[]; historyForwardStack: string[]; historyNavigationType: 'back' | 'forward'; }; versions: VersionsStateProps; dialogs: { confirm: ConfirmDialogStateProps; error: ErrorDialogStateProps; minimizedTabs: MinimizedDialogsStateProps; newContent: NewContentDialogStateProps; history: HistoryDialogStateProps; viewVersion: ViewVersionDialogStateProps; compareVersions: CompareVersionsDialogStateProps; publish: PublishDialogStateProps; dependencies: DependenciesDialogStateProps; delete: DeleteDialogStateProps; edit: LegacyFormDialogStateProps; codeEditor: CodeEditorDialogStateProps; workflowCancellation: WorkflowCancellationDialogStateProps; reject: RejectDialogStateProps; createFolder: CreateFolderStateProps; createFile: CreateFileStateProps; renameAsset: RenameAssetStateProps; copy: CopyDialogStateProps; upload: UploadDialogStateProps; singleFileUpload: SingleFileUploadDialogStateProps; preview: PreviewDialogStateProps; editSite: EditSiteDialogStateProps; pathSelection: PathSelectionDialogStateProps; changeContentType: ChangeContentTypeDialogStateProps; itemMenu: ItemMenuStateProps; itemMegaMenu: ItemMegaMenuStateProps; launcher: LauncherStateProps; publishingStatus: PublishingStatusDialogStateProps; unlockPublisher: UnlockPublisherDialogStateProps; widget: WidgetDialogStateProps; uiBlocker: UIBlockerStateProps; brokenReferences: BrokenReferencesDialogStateProps; folderMoveAlert: FolderMoveAlertDialogStateProps; }; uiConfig: { error: ApiResponse; isFetching: boolean; currentSite: string; siteLocales: { error: ApiResponse; isFetching: boolean; localeCodes: string[]; defaultLocaleCode: string; }; upload: { timeout: number; maxActiveUploads: number; maxSimultaneousUploads: number; }; locale: { localeCode: string; dateTimeFormatOptions: Intl.DateTimeFormatOptions; }; publishing: { publishCommentRequired: boolean; deleteCommentRequired: boolean; bulkPublishCommentRequired: boolean; publishByCommitCommentRequired: boolean; publishEverythingCommentRequired: boolean; submissionCommentMaxLength: number; }; cdataEscapedFieldPatterns: string[]; references: LookupTable; xml: string; remoteGitBranch: string; }; pathNavigator: LookupTable<PathNavigatorStateProps>; pathNavigatorTree: LookupTable<PathNavigatorTreeStateProps>; dashboard: { widgets?: WidgetDescriptor[]; mainSection?: { widgets: WidgetDescriptor[]; }; }; globalNavigation: { error: AjaxError; items: Array<{ icon: SystemIconDescriptor; id: string; label: string; }>; isFetching: boolean; }; } export default GlobalState;