burdy
Version:
Open Source Headless Platform
124 lines (123 loc) • 6.95 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const react_2 = require("@fluentui/react");
const hoc_1 = require("../../../helpers/hoc");
const posts_context_1 = require("../context/posts.context");
const react_router_1 = require("react-router");
const post_versions_restore_dialog_1 = __importDefault(require("./post-versions-restore-dialog"));
const post_versions_delete_dialog_1 = __importDefault(require("./post-versions-delete-dialog"));
const query_string_1 = __importDefault(require("query-string"));
const PostVersionsCommandBar = () => {
const { getPosts, selectedPosts, setStateData, stateData } = (0, posts_context_1.usePosts)();
const commandItems = (0, react_1.useMemo)(() => [
{
key: 'restore',
text: 'Restore',
disabled: (selectedPosts === null || selectedPosts === void 0 ? void 0 : selectedPosts.length) !== 1,
iconProps: { iconName: 'Undo' },
onClick: () => {
setStateData('versionRestoreOpen', true);
},
},
{
key: 'delete',
text: 'Delete',
disabled: !((selectedPosts === null || selectedPosts === void 0 ? void 0 : selectedPosts.length) > 0),
iconProps: { iconName: 'Delete' },
onClick: () => {
setStateData('versionsDeleteOpen', true);
},
},
], [getPosts, getPosts, stateData]);
return (react_1.default.createElement(react_2.CommandBar, { items: commandItems, styles: {
root: {
padding: 0,
},
} }));
};
const PostVersionsSelectPanel = ({ isOpen, onDismiss, selectionMode, onSelect, onUpdate, onDelete, post, }) => {
const { getVersions, selectedPosts, selection, stateData, setStateData } = (0, posts_context_1.usePosts)();
const location = (0, react_router_1.useLocation)();
const history = (0, react_router_1.useHistory)();
(0, react_1.useEffect)(() => {
if (isOpen && (post === null || post === void 0 ? void 0 : post.id)) {
getVersions.execute(post === null || post === void 0 ? void 0 : post.id);
}
}, [isOpen, post]);
const Footer = (0, react_1.useCallback)(() => (react_1.default.createElement(react_2.Stack, { horizontal: true, tokens: { childrenGap: 10 } },
react_1.default.createElement(react_2.PrimaryButton, { disabled: (selectedPosts === null || selectedPosts === void 0 ? void 0 : selectedPosts.length) !== 1, onClick: () => {
onSelect(selectedPosts === null || selectedPosts === void 0 ? void 0 : selectedPosts[0]);
} }, "Open"),
react_1.default.createElement(react_2.DefaultButton, { onClick: onDismiss }, "Cancel"))), [isOpen, post, selectedPosts]);
const columns = (0, react_1.useMemo)(() => [
{
key: 'author',
name: 'Author',
fieldName: 'author',
minWidth: 50,
maxWidth: 100,
onRender: ({ author }) => (react_1.default.createElement("span", null, author === null || author === void 0 ? void 0 :
author.firstName,
" ", author === null || author === void 0 ? void 0 :
author.lastName)),
isPadded: true,
},
{
key: 'createdAt',
name: 'Created At',
onRender: ({ createdAt }) => react_1.default.createElement("div", null, createdAt),
minWidth: 50,
data: 'string',
isPadded: true,
},
], []);
return (react_1.default.createElement(react_2.Panel, { isOpen: isOpen, headerText: "Select version", isFooterAtBottom: true, onRenderFooterContent: Footer, onDismiss: onDismiss, type: react_2.PanelType.medium },
react_1.default.createElement(PostVersionsCommandBar, null),
react_1.default.createElement(react_2.ShimmeredDetailsList, { setKey: "items", items: (getVersions === null || getVersions === void 0 ? void 0 : getVersions.result) || [], columns: columns, selectionMode: selectionMode, selection: selection, enableShimmer: getVersions.loading, ariaLabelForShimmer: "Versions are being fetched", ariaLabelForGrid: "Item details" }),
react_1.default.createElement(post_versions_delete_dialog_1.default, { isOpen: stateData === null || stateData === void 0 ? void 0 : stateData.versionsDeleteOpen, onDismiss: () => setStateData('versionsDeleteOpen', false), onDeleted: (deleted) => {
setStateData('versionsDeleteOpen', false);
getVersions.execute(post === null || post === void 0 ? void 0 : post.id);
onDelete();
if ((deleted || []).indexOf(post === null || post === void 0 ? void 0 : post.versionId) > -1 && onUpdate) {
history.push({
search: query_string_1.default.stringify(Object.assign(Object.assign({}, (query_string_1.default.parse(location.search) || {})), { versionId: undefined, action: 'version_deleted' })),
});
onDismiss();
}
} }),
react_1.default.createElement(post_versions_restore_dialog_1.default, { isOpen: stateData === null || stateData === void 0 ? void 0 : stateData.versionRestoreOpen, onDismiss: () => setStateData('versionRestoreOpen', false), onRestored: () => {
setStateData('versionRestoreOpen', false);
history.push({
search: query_string_1.default.stringify(Object.assign(Object.assign({}, (query_string_1.default.parse(location.search) || {})), { action: 'version_restored' })),
});
if (onUpdate) {
onUpdate();
}
} })));
};
exports.default = (0, hoc_1.composeWrappers)({
postsContext: posts_context_1.PostsContextProvider,
})(PostVersionsSelectPanel);