@wener/console
Version:
Base console UI toolkit
230 lines (229 loc) • 8.22 kB
JavaScript
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
}
else {
obj[key] = value;
}
return obj;
}
function _object_spread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function (key) {
_define_property(target, key, source[key]);
});
}
return target;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _object_spread_props(target, source) {
source = source != null ? source : {};
if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
}
else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _object_without_properties(source, excluded) {
if (source == null)
return {};
var target = {}, sourceKeys, key, i;
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
sourceKeys = Reflect.ownKeys(source);
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0)
continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key))
continue;
target[key] = source[key];
}
return target;
}
target = _object_without_properties_loose(source, excluded);
if (Object.getOwnPropertySymbols) {
sourceKeys = Object.getOwnPropertySymbols(source);
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0)
continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key))
continue;
target[key] = source[key];
}
}
return target;
}
function _object_without_properties_loose(source, excluded) {
if (source == null)
return {};
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
for (i = 0; i < sourceKeys.length; i++) {
key = sourceKeys[i];
if (excluded.indexOf(key) >= 0)
continue;
if (!Object.prototype.propertyIsEnumerable.call(source, key))
continue;
target[key] = source[key];
}
return target;
}
function _type_of(obj) {
"@swc/helpers - typeof";
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
}
import { useMemo } from "react";
import { PiCalendarBlank } from "react-icons/pi";
import { getTitleOfResource } from "@wener/common/resource";
import { DataViewLayout } from "./DataViewLayout.js";
/**
* Get description from resource
*/ export function getDescriptionOfResource(res) {
if (res && (typeof res === "undefined" ? "undefined" : _type_of(res)) === "object") {
return res.description || res.remark;
}
return undefined;
}
/**
* Format resource title with code
*/ export function formatResourceTitle(data) {
var code = data.code;
var primary = data.title || data.fullName;
var sec = data.displayName;
primary || (primary = sec);
if (sec === primary) {
sec = undefined;
}
return /*#__PURE__*/ React.createElement("span", {
className: "flex items-center gap-2"
}, code && /*#__PURE__*/ React.createElement("span", {
className: "tabular-nums"
}, code), Boolean(primary) && /*#__PURE__*/ React.createElement("span", {
className: "font-semibold"
}, primary), sec && /*#__PURE__*/ React.createElement("small", {
className: "font-light"
}, "(", sec, ")"));
}
/**
* Format resource meta info (dates, owner, etc.)
*/ export function formatResourceMeta(data) {
var createdAt = data.createdAt, updatedAt = data.updatedAt, createdBy = data.createdBy, updatedBy = data.updatedBy;
var parts = [];
// Created by
if (createdBy) {
var creatorName = getTitleOfResource(createdBy);
if (creatorName) {
parts.push(/*#__PURE__*/ React.createElement("span", {
key: "creator"
}, "\u521B\u5EFA\u8005: ", /*#__PURE__*/ React.createElement("strong", null, creatorName)));
}
}
// Updated by
if (updatedBy && updatedBy.id !== (createdBy === null || createdBy === void 0 ? void 0 : createdBy.id)) {
var updaterName = getTitleOfResource(updatedBy);
if (updaterName) {
parts.push(/*#__PURE__*/ React.createElement("span", {
key: "updater"
}, "\u66F4\u65B0\u8005: ", /*#__PURE__*/ React.createElement("strong", null, updaterName)));
}
}
// Dates
if (createdAt || updatedAt) {
var dates = [
/*#__PURE__*/ React.createElement(PiCalendarBlank, {
key: "icon"
})
];
if (updatedAt) {
dates.push(/*#__PURE__*/ React.createElement("span", {
key: "updated"
}, typeof updatedAt === "string" ? new Date(updatedAt).toLocaleDateString() : updatedAt.toLocaleDateString()));
}
if (createdAt && createdAt !== updatedAt) {
dates.push(/*#__PURE__*/ React.createElement("span", {
key: "created"
}, "(\u521B\u5EFA:", " ", typeof createdAt === "string" ? new Date(createdAt).toLocaleDateString() : createdAt.toLocaleDateString(), ")"));
}
parts.push(/*#__PURE__*/ React.createElement("span", {
key: "dates",
className: "flex items-center gap-1"
}, dates));
}
return parts.length > 0 ? /*#__PURE__*/ React.createElement(React.Fragment, null, parts.map(function (p, i) {
return i > 0 ? [
" \u2022 ",
p
] : p;
})) : null;
}
export var ResourceListItem = function (_0) {
var data = _0.data, _0_showCode = _0.showCode, showCode = _0_showCode === void 0 ? true : _0_showCode, _0_showMeta = _0.showMeta, showMeta = _0_showMeta === void 0 ? true : _0_showMeta, customTitle = _0.customTitle, customDescription = _0.customDescription, customMeta = _0.customMeta, props = _object_without_properties(_0, [
"data",
"showCode",
"showMeta",
"customTitle",
"customDescription",
"customMeta"
]);
var title = useMemo(function () {
if (customTitle)
return customTitle(data);
return showCode ? formatResourceTitle(data) : getTitleOfResource(data);
}, [
data,
showCode,
customTitle
]);
var description = useMemo(function () {
if (customDescription)
return customDescription(data);
return getDescriptionOfResource(data);
}, [
data,
customDescription
]);
var meta = useMemo(function () {
if (customMeta)
return customMeta(data);
if (!showMeta)
return null;
return formatResourceMeta(data);
}, [
data,
showMeta,
customMeta
]);
return /*#__PURE__*/ React.createElement(DataViewLayout.ListItem, _object_spread_props(_object_spread({}, props), {
title: title,
description: description,
meta: meta
}));
};