UNPKG

@awsui/components-react

Version:

On July 19th, 2022, we launched [Cloudscape Design System](https://cloudscape.design). Cloudscape is an evolution of AWS-UI. It consists of user interface guidelines, front-end components, design resources, and development tools for building intuitive, en

107 lines 4.98 kB
import { __rest } from "tslib"; // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 import debounce from '../../debounce'; import { reportRuntimeApiWarning } from '../helpers/metrics'; const updatableProperties = [ 'badge', 'resizable', 'defaultSize', 'orderPriority', 'defaultActive', 'onResize', ]; export class DrawersController { constructor() { this.drawers = []; this.drawersRegistrationListener = null; this.drawerOpenedListener = null; this.drawerClosedListener = null; this.scheduleUpdate = debounce(() => { var _a; (_a = this.drawersRegistrationListener) === null || _a === void 0 ? void 0 : _a.call(this, this.drawers); }, 0); this.registerDrawer = (config) => { if (this.drawers.find(drawer => drawer.id === config.id)) { reportRuntimeApiWarning('app-layout-drawers', `drawer with id "${config.id}" is already registered`); } this.drawers = this.drawers.concat(config); this.scheduleUpdate(); }; this.updateDrawer = (_a) => { var _b; var { id: drawerId } = _a, rest = __rest(_a, ["id"]); const drawerIndex = this.drawers.findIndex(({ id }) => id === drawerId); const oldDrawerConfig = (_b = this.drawers) === null || _b === void 0 ? void 0 : _b[drawerIndex]; if (!oldDrawerConfig) { throw new Error(`[AwsUi] [runtime drawers] drawer with id ${drawerId} not found`); } const drawers = this.drawers.slice(); const updatedDrawer = Object.assign({}, oldDrawerConfig); for (const key of updatableProperties) { if (key in rest) { updatedDrawer[key] = rest[key]; } } drawers[drawerIndex] = updatedDrawer; this.drawers = drawers; this.scheduleUpdate(); }; this.onDrawersRegistered = (listener) => { if (this.drawersRegistrationListener !== null) { reportRuntimeApiWarning('app-layout-drawers', 'multiple app layout instances detected when calling onDrawersRegistered'); } this.drawersRegistrationListener = listener; this.scheduleUpdate(); return () => { this.drawersRegistrationListener = null; }; }; this.clearRegisteredDrawers = () => { this.drawers = []; }; this.onDrawerOpened = (listener) => { if (this.drawerOpenedListener !== null) { reportRuntimeApiWarning('app-layout-drawers', 'multiple app layout instances detected when calling onDrawerOpened'); } this.drawerOpenedListener = listener; return () => { this.drawerOpenedListener = null; }; }; this.onDrawerClosed = (listener) => { if (this.drawerClosedListener !== null) { reportRuntimeApiWarning('app-layout-drawers', 'multiple app layout instances detected when calling onDrawerClosed'); } this.drawerClosedListener = listener; return () => { this.drawerClosedListener = null; }; }; this.openDrawer = (drawerId, params) => { var _a; (_a = this.drawerOpenedListener) === null || _a === void 0 ? void 0 : _a.call(this, drawerId, params); }; this.closeDrawer = (drawerId, params) => { var _a; (_a = this.drawerClosedListener) === null || _a === void 0 ? void 0 : _a.call(this, drawerId, params); }; } installPublic(api = {}) { var _a, _b, _c, _d; (_a = api.registerDrawer) !== null && _a !== void 0 ? _a : (api.registerDrawer = this.registerDrawer); (_b = api.updateDrawer) !== null && _b !== void 0 ? _b : (api.updateDrawer = this.updateDrawer); (_c = api.openDrawer) !== null && _c !== void 0 ? _c : (api.openDrawer = this.openDrawer); (_d = api.closeDrawer) !== null && _d !== void 0 ? _d : (api.closeDrawer = this.closeDrawer); return api; } installInternal(internalApi = {}) { var _a, _b, _c, _d; (_a = internalApi.clearRegisteredDrawers) !== null && _a !== void 0 ? _a : (internalApi.clearRegisteredDrawers = this.clearRegisteredDrawers); (_b = internalApi.onDrawersRegistered) !== null && _b !== void 0 ? _b : (internalApi.onDrawersRegistered = this.onDrawersRegistered); (_c = internalApi.onDrawerOpened) !== null && _c !== void 0 ? _c : (internalApi.onDrawerOpened = this.onDrawerOpened); (_d = internalApi.onDrawerClosed) !== null && _d !== void 0 ? _d : (internalApi.onDrawerClosed = this.onDrawerClosed); return internalApi; } } //# sourceMappingURL=drawers.js.map