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

135 lines 6.59 kB
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.drawersUpdateListeners = []; this.drawerResizeListener = null; this.scheduleUpdate = debounce(() => { var _a; (_a = this.drawersRegistrationListener) === null || _a === void 0 ? void 0 : _a.call(this, this.drawers); this.drawersUpdateListeners.forEach(drawersUpdateListeners => { drawersUpdateListeners === null || drawersUpdateListeners === void 0 ? void 0 : drawersUpdateListeners(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 = ({ id: drawerId, ...rest }) => { var _a; const drawerIndex = this.drawers.findIndex(({ id }) => id === drawerId); const oldDrawerConfig = (_a = this.drawers) === null || _a === void 0 ? void 0 : _a[drawerIndex]; if (!oldDrawerConfig) { throw new Error(`[AwsUi] [runtime drawers] drawer with id ${drawerId} not found`); } const drawers = this.drawers.slice(); const updatedDrawer = { ...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.drawersUpdateListeners = []; }; }; 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); }; this.onDrawersUpdated = (listener) => { this.drawersUpdateListeners.push(listener); return () => { this.drawersUpdateListeners = this.drawersUpdateListeners.filter(item => item !== listener); }; }; this.onDrawerResize = (listener) => { if (this.drawerResizeListener !== null) { reportRuntimeApiWarning('app-layout-drawers', 'multiple app layout instances detected when calling onDrawerResize'); } this.drawerResizeListener = listener; return () => { this.drawerResizeListener = null; }; }; this.resizeDrawer = (drawerId, size) => { var _a; (_a = this.drawerResizeListener) === null || _a === void 0 ? void 0 : _a.call(this, drawerId, size); }; this.getDrawersState = () => { return this.drawers; }; } installPublic(api = {}) { var _a, _b, _c, _d, _e; (_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); (_e = api.resizeDrawer) !== null && _e !== void 0 ? _e : (api.resizeDrawer = this.resizeDrawer); return api; } installInternal(internalApi = {}) { var _a, _b, _c, _d, _e, _f, _g; (_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); (_e = internalApi.onDrawerResize) !== null && _e !== void 0 ? _e : (internalApi.onDrawerResize = this.onDrawerResize); (_f = internalApi.onDrawersUpdated) !== null && _f !== void 0 ? _f : (internalApi.onDrawersUpdated = this.onDrawersUpdated); (_g = internalApi.getDrawersState) !== null && _g !== void 0 ? _g : (internalApi.getDrawersState = this.getDrawersState); return internalApi; } } //# sourceMappingURL=drawers.js.map