@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
JavaScript
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