@panneau/lists 5.0.0-alpha.8 → 5.0.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ListView.d.ts +10 -1
- package/dist/ListView.d.ts.map +1 -1
- package/dist/ListView.js +48 -36
- package/dist/ListView.js.map +1 -1
- package/dist/displays/displays.d.ts +5 -2
- package/dist/displays/displays.d.ts.map +1 -1
- package/dist/displays/displays.js +46 -10
- package/dist/displays/displays.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/toolbar/Pagination.d.ts +33 -0
- package/dist/toolbar/Pagination.d.ts.map +1 -1
- package/dist/toolbar/Pagination.js +130 -1
- package/dist/toolbar/Pagination.js.map +1 -1
- package/dist/values.d.ts +2 -0
- package/dist/values.d.ts.map +1 -1
- package/dist/values.js +6 -2
- package/dist/values.js.map +1 -1
- package/package.json +7 -7
package/dist/ListView.d.ts
CHANGED
|
@@ -18,6 +18,15 @@ export interface ListViewProps {
|
|
|
18
18
|
* pagination and offers to select every matching item. Without it, `items` is the whole list.
|
|
19
19
|
*/
|
|
20
20
|
total?: number | undefined;
|
|
21
|
+
/**
|
|
22
|
+
* The cursors of the page, for a list paged with cursors (`nextCursor` and `previousCursor`
|
|
23
|
+
* of its `meta`): the list then has buttons to the previous and next pages, without page
|
|
24
|
+
* numbers or a total, and doesn't offer to select every matching item.
|
|
25
|
+
*/
|
|
26
|
+
cursors?: {
|
|
27
|
+
next: string | null;
|
|
28
|
+
previous?: string | null | undefined;
|
|
29
|
+
} | undefined;
|
|
21
30
|
/** Shows that items are loading. Items already shown stay, dimmed. */
|
|
22
31
|
isLoading?: boolean;
|
|
23
32
|
/** An error while loading: an alert with a retry replaces the items. */
|
|
@@ -86,5 +95,5 @@ export interface ListViewProps {
|
|
|
86
95
|
* cards), with sorting, search, filters and their chips, pagination, selection and actions. It
|
|
87
96
|
* fetches nothing: the caller gives the items of the list's query and their total.
|
|
88
97
|
*/
|
|
89
|
-
export declare function ListView({ list, items, columns, total, isLoading, error, onRetry, filters, fields, search, layouts: layoutsProp, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId, displays, layoutComponents, filterControls, toolbar, emptyMessage, 'aria-label': ariaLabel, className, }: ListViewProps): import("react").JSX.Element;
|
|
98
|
+
export declare function ListView({ list, items, columns, total, cursors, isLoading, error, onRetry, filters, fields, search, layouts: layoutsProp, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId, displays, layoutComponents, filterControls, toolbar, emptyMessage, 'aria-label': ariaLabel, className, }: ListViewProps): import("react").JSX.Element;
|
|
90
99
|
//# sourceMappingURL=ListView.d.ts.map
|
package/dist/ListView.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ListView.d.ts","sourceRoot":"","sources":["../src/ListView.tsx"],"names":[],"mappings":"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"}
|
package/dist/ListView.js
CHANGED
|
@@ -12,7 +12,7 @@ import { RowActions } from "./actions/RowActions.js";
|
|
|
12
12
|
import { FilterChips, FilterControls, useFilterLabels } from "./filters/Filters.js";
|
|
13
13
|
import { countSelected, getPageSelection, isItemSelected } from "./selection.js";
|
|
14
14
|
import { LayoutSwitch } from "./toolbar/LayoutSwitch.js";
|
|
15
|
-
import { Pagination } from "./toolbar/Pagination.js";
|
|
15
|
+
import { CursorPagination, Pagination } from "./toolbar/Pagination.js";
|
|
16
16
|
import { SearchField } from "./toolbar/SearchField.js";
|
|
17
17
|
import { SortSelect } from "./toolbar/SortSelect.js";
|
|
18
18
|
import { useListState } from "./useListState.js";
|
|
@@ -31,8 +31,8 @@ function keyOf(action, item) {
|
|
|
31
31
|
* fetches nothing: the caller gives the items of the list's query and their total.
|
|
32
32
|
*/
|
|
33
33
|
function ListView(t0) {
|
|
34
|
-
const $ = c(
|
|
35
|
-
const { list, items, columns, total, isLoading: t1, error: t2, onRetry, filters: t3, fields: t4, search: t5, layouts: t6, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId: t7, displays, layoutComponents, filterControls, toolbar, emptyMessage, "aria-label": ariaLabel, className } = t0;
|
|
34
|
+
const $ = c(120);
|
|
35
|
+
const { list, items, columns, total, cursors, isLoading: t1, error: t2, onRetry, filters: t3, fields: t4, search: t5, layouts: t6, layout: controlledLayout, onLayoutChange, perPageOptions, selectable: selectableProp, actions: actionsProp, onAction, previewAction, actionIcons, itemTitle, getItemLabel: getItemLabelProp, getItemHref, currentItemId: t7, displays, layoutComponents, filterControls, toolbar, emptyMessage, "aria-label": ariaLabel, className } = t0;
|
|
36
36
|
const isLoading = t1 === void 0 ? false : t1;
|
|
37
37
|
const error = t2 === void 0 ? null : t2;
|
|
38
38
|
let t8;
|
|
@@ -565,46 +565,58 @@ function ListView(t0) {
|
|
|
565
565
|
$[94] = t32;
|
|
566
566
|
} else t32 = $[94];
|
|
567
567
|
let t33;
|
|
568
|
-
if ($[95] !==
|
|
569
|
-
t33 =
|
|
568
|
+
if ($[95] !== cursors || $[96] !== error || $[97] !== list || $[98] !== pageItems || $[99] !== perPageOptions || $[100] !== query.cursor || $[101] !== query.page || $[102] !== query.perPage || $[103] !== total) {
|
|
569
|
+
t33 = cursors !== void 0 && error === null ? /* @__PURE__ */ jsx(CursorPagination, {
|
|
570
|
+
perPage: query.perPage ?? pageItems.length,
|
|
571
|
+
hasPrevious: query.cursor !== void 0,
|
|
572
|
+
hasNext: cursors.next !== null,
|
|
573
|
+
onPrevious: () => list.previousPage(cursors.previous),
|
|
574
|
+
onNext: () => {
|
|
575
|
+
if (cursors.next !== null) list.nextPage(cursors.next);
|
|
576
|
+
},
|
|
577
|
+
perPageOptions,
|
|
578
|
+
onPerPageChange: (perPage) => list.setPerPage(perPage)
|
|
579
|
+
}) : total !== void 0 && error === null && total > 0 ? /* @__PURE__ */ jsx(Pagination, {
|
|
570
580
|
page: query.page ?? 1,
|
|
571
581
|
perPage: query.perPage ?? pageItems.length,
|
|
572
582
|
total,
|
|
573
583
|
onPageChange: (page) => list.setPage(page),
|
|
574
584
|
perPageOptions,
|
|
575
|
-
onPerPageChange: (
|
|
585
|
+
onPerPageChange: (perPage_0) => list.setPerPage(perPage_0)
|
|
576
586
|
}) : null;
|
|
577
|
-
$[95] =
|
|
578
|
-
$[96] =
|
|
579
|
-
$[97] =
|
|
580
|
-
$[98] =
|
|
581
|
-
$[99] =
|
|
582
|
-
$[100] = query.
|
|
583
|
-
$[101] =
|
|
584
|
-
$[102] =
|
|
585
|
-
|
|
587
|
+
$[95] = cursors;
|
|
588
|
+
$[96] = error;
|
|
589
|
+
$[97] = list;
|
|
590
|
+
$[98] = pageItems;
|
|
591
|
+
$[99] = perPageOptions;
|
|
592
|
+
$[100] = query.cursor;
|
|
593
|
+
$[101] = query.page;
|
|
594
|
+
$[102] = query.perPage;
|
|
595
|
+
$[103] = total;
|
|
596
|
+
$[104] = t33;
|
|
597
|
+
} else t33 = $[104];
|
|
586
598
|
let t34;
|
|
587
|
-
if ($[
|
|
599
|
+
if ($[105] !== execute) {
|
|
588
600
|
t34 = (event_1) => void execute(event_1);
|
|
589
|
-
$[
|
|
590
|
-
$[
|
|
591
|
-
} else t34 = $[
|
|
601
|
+
$[105] = execute;
|
|
602
|
+
$[106] = t34;
|
|
603
|
+
} else t34 = $[106];
|
|
592
604
|
let t35;
|
|
593
|
-
if ($[
|
|
605
|
+
if ($[107] !== closeConfirmation || $[108] !== confirming || $[109] !== preview || $[110] !== t34) {
|
|
594
606
|
t35 = /* @__PURE__ */ jsx(ConfirmDialog, {
|
|
595
607
|
event: confirming,
|
|
596
608
|
preview,
|
|
597
609
|
onConfirm: t34,
|
|
598
610
|
onCancel: closeConfirmation
|
|
599
611
|
});
|
|
600
|
-
$[
|
|
601
|
-
$[
|
|
602
|
-
$[
|
|
603
|
-
$[
|
|
604
|
-
$[
|
|
605
|
-
} else t35 = $[
|
|
612
|
+
$[107] = closeConfirmation;
|
|
613
|
+
$[108] = confirming;
|
|
614
|
+
$[109] = preview;
|
|
615
|
+
$[110] = t34;
|
|
616
|
+
$[111] = t35;
|
|
617
|
+
} else t35 = $[111];
|
|
606
618
|
let t36;
|
|
607
|
-
if ($[
|
|
619
|
+
if ($[112] !== t25 || $[113] !== t26 || $[114] !== t29 || $[115] !== t30 || $[116] !== t32 || $[117] !== t33 || $[118] !== t35) {
|
|
608
620
|
t36 = /* @__PURE__ */ jsxs("div", {
|
|
609
621
|
className: t25,
|
|
610
622
|
children: [
|
|
@@ -616,15 +628,15 @@ function ListView(t0) {
|
|
|
616
628
|
t35
|
|
617
629
|
]
|
|
618
630
|
});
|
|
619
|
-
$[
|
|
620
|
-
$[
|
|
621
|
-
$[
|
|
622
|
-
$[
|
|
623
|
-
$[
|
|
624
|
-
$[
|
|
625
|
-
$[
|
|
626
|
-
$[
|
|
627
|
-
} else t36 = $[
|
|
631
|
+
$[112] = t25;
|
|
632
|
+
$[113] = t26;
|
|
633
|
+
$[114] = t29;
|
|
634
|
+
$[115] = t30;
|
|
635
|
+
$[116] = t32;
|
|
636
|
+
$[117] = t33;
|
|
637
|
+
$[118] = t35;
|
|
638
|
+
$[119] = t36;
|
|
639
|
+
} else t36 = $[119];
|
|
628
640
|
return t36;
|
|
629
641
|
}
|
|
630
642
|
function _temp7(column_0) {
|
package/dist/ListView.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","names":["ReactNode","useRef","useState","List","usePlugins","Action","Field","Filter","Alert","Button","Checkbox","usePanneauIntl","useToast","ListSkeleton","styles","ActionButton","ConfirmDialog","ConfirmPreview","needsConfirmation","RowActions","ListActions","getActionHref","groupListActions","hasScope","isAllowedOn","ActionIcons","cx","FilterChips","FilterControls","useFilterLabels","builtInLayouts","messages","countSelected","getPageSelection","isItemSelected","LayoutSwitch","Pagination","SearchField","SortSelect","DisplayEntry","FilterEntry","ListActionEvent","ListActionHandler","ListActionPreviewer","ListColumn","ListItem","ListLayoutEntry","useListState","useRenderValue","getColumnValue","toText","ListViewProps","list","items","columns","total","isLoading","error","Error","onRetry","filters","fields","search","layouts","layout","onLayoutChange","perPageOptions","selectable","actions","onAction","previewAction","actionIcons","itemTitle","getItemLabel","item","getItemHref","currentItemId","displays","Readonly","Record","layoutComponents","filterControls","toolbar","emptyMessage","className","keyOf","action","undefined","id","ListView","t0","$","_c","t1","t2","t3","t4","t5","t6","controlledLayout","selectableProp","actionsProp","getItemLabelProp","t7","ariaLabel","t8","t9","t10","layoutsProp","intl","toasts","plugins","query","selection","filterLabels","uncontrolledLayout","setLayout","confirming","setConfirming","preview","setPreview","confirmation","pending","setPending","t11","formatMessage","label","pageItems","count","length","t12","sort","t13","filter","filterValues","t14","q","Object","keys","hasQuery","t15","listLayouts","fromEntries","t16","t17","allLayouts","t18","t19","available","Layout","table","grouped","rowActions","row","_temp","rowMenu","menu","_temp2","toolbarActions","_temp3","selectionActions","_temp4","resourceActions","_temp5","selectedCount","t20","selectedItems","pageSelection","t21","locale","item_0","titleColumn","find","column","title","renderValue","closeConfirmation","current","execute","event","Promise","resolve","then","outcome","scope","clearSelection","catch","caught","show","actionFailed","message","description","tone","run","event_0","action_4","selection_0","dryRun","asks","confirm","status","result","skipped","runOnItem","action_5","item_1","runOnSelection","action_6","selected","getSelection","item_2","runOnResource","action_7","renderActions","item_3","allowed","action_8","action_9","running","endsWith","split","action_10","t22","selectPage","pageCheckbox","ids","map","_temp6","deselect","select","sortable","some","_temp7","showToolbar","t23","clearFilters","forEach","id_0","setFilter","setSearch","t24","bb0","t25","loadFailed","t26","retry","t27","perPage","noResults","empty","t28","state","item_5","item_6","item_7","toggle","column_1","toggleSort","body","toolbarStart","id_1","value","remember","labels","toolbarEnd","tableSort","next","setSort","next_0","action_11","action_12","id_2","t29","t30","selectionCount","mode","allMatchingSelected","selectAllMatching","action_13","skipped_0","item_8","t31","t32","t33","page","setPage","setPerPage","t34","event_1","t35","t36","column_0","item_4","action_3","action_2","action_1","index","all","findIndex","candidate","action_0","_c","styles"],"sources":["../src/ListView.tsx"],"sourcesContent":["import { type ReactNode, useRef, useState } from 'react';\n\nimport type { List } from '@panneau/core';\nimport { usePlugins } from '@panneau/core';\nimport type { Action, Field, Filter } from '@panneau/protocol';\nimport { Alert, Button, Checkbox, usePanneauIntl, useToast } from '@panneau/ui';\n\nimport { ListSkeleton } from './ListSkeleton';\nimport styles from './ListView.module.css';\nimport { ActionButton } from './actions/ActionButton';\nimport { ConfirmDialog, type ConfirmPreview, needsConfirmation } from './actions/ConfirmDialog';\nimport { RowActions } from './actions/RowActions';\nimport {\n type ListActions,\n getActionHref,\n groupListActions,\n hasScope,\n isAllowedOn,\n} from './actions/actions';\nimport type { ActionIcons } from './actions/icons';\nimport { cx } from './cx';\nimport { FilterChips, FilterControls, useFilterLabels } from './filters/Filters';\nimport { builtInLayouts } from './layouts/builtIn';\nimport { messages } from './messages';\nimport { countSelected, getPageSelection, isItemSelected } from './selection';\nimport { LayoutSwitch } from './toolbar/LayoutSwitch';\nimport { Pagination } from './toolbar/Pagination';\nimport { SearchField } from './toolbar/SearchField';\nimport { SortSelect } from './toolbar/SortSelect';\nimport type {\n DisplayEntry,\n FilterEntry,\n ListActionEvent,\n ListActionHandler,\n ListActionPreviewer,\n ListColumn,\n ListItem,\n ListLayoutEntry,\n} from './types';\nimport { useListState } from './useListState';\nimport { useRenderValue } from './useRenderValue';\nimport { getColumnValue, toText } from './values';\n\nexport interface ListViewProps {\n /** The list state of `@panneau/core` (`useList()`): query and selection. */\n list: List;\n /**\n * The items of the current page. `undefined` while they load for the first time: the list\n * draws a skeleton of its rows, from its columns and its page size.\n */\n items: readonly ListItem[] | undefined;\n columns: readonly ListColumn[];\n /**\n * How many items match the query, on every page (`meta.total`). With it, the list shows\n * pagination and offers to select every matching item. Without it, `items` is the whole list.\n */\n total?: number | undefined;\n /** Shows that items are loading. Items already shown stay, dimmed. */\n isLoading?: boolean;\n /** An error while loading: an alert with a retry replaces the items. */\n error?: Error | null;\n onRetry?: () => void;\n /** Filter controls, with chips for the active filters. */\n filters?: readonly Filter[];\n /** Fields of the items, for the labels and options of filters that are not columns. */\n fields?: readonly Field[];\n /** Shows a search field (`q`). */\n search?: boolean;\n /** Layouts to choose from, the first one being the default. Defaults to `['table']`. */\n layouts?: readonly string[];\n /** The layout, controlled. */\n layout?: string;\n onLayoutChange?: (layout: string) => void;\n /** Page sizes to choose from. */\n perPageOptions?: readonly number[];\n /** Shows checkboxes. Defaults to whether there are selection actions. */\n selectable?: boolean;\n /**\n * Actions: a list (placed by their `placement`, or by scope), or grouped by placement as\n * `resolveList()` does. Those the user can't run (`abilities.run`) are hidden.\n */\n actions?: ListActions;\n /** Runs an action, after its confirmation. */\n onAction?: ListActionHandler;\n /**\n * Asks the backend how many items of a query selection (\"Select all N items\") an action will\n * skip, before the confirmation: the list only knows the abilities of the current page. Only\n * for actions with `dryRun`. `useActionPreview()` of `@panneau/actions` is one.\n */\n previewAction?: ListActionPreviewer;\n /**\n * Icons of actions by action id (`{ archive: Archive }`), for actions written in code. They\n * win over the Lucide icon an action names (`\"icon\": \"archive\"`).\n */\n actionIcons?: ActionIcons;\n /** The field that titles items, for their label (`itemTitle` of the resource). */\n itemTitle?: string;\n /** The label of an item, for checkboxes and actions. Defaults to its title, then its id. */\n getItemLabel?: (item: ListItem) => string;\n /** A link to an item, on its title. */\n getItemHref?: (item: ListItem) => string | null;\n /**\n * The item shown next to the list, such as in a panel of its details: its row is marked, and\n * the link of its title is the current page.\n */\n currentItemId?: string | null;\n /** Displays by name, over the built-in ones and those of the plugins. */\n displays?: Readonly<Record<string, DisplayEntry>>;\n /** Layouts by id, over the built-in ones and those of the plugins. */\n layoutComponents?: Readonly<Record<string, ListLayoutEntry>>;\n /** Filter controls by filter type, over the built-in ones. */\n filterControls?: Readonly<Record<string, FilterEntry>>;\n /** Content at the end of the toolbar, such as a button to create an item. */\n toolbar?: ReactNode;\n /** Shown when the list has no items, without filters or search. */\n emptyMessage?: ReactNode;\n /** Accessible name of the list. Defaults to \"Items\". */\n 'aria-label'?: string;\n className?: string;\n}\n\nfunction keyOf(action: Action, item?: ListItem): string {\n return item !== undefined ? `${action.id}\\u0000${item.id}` : action.id;\n}\n\n/**\n * Renders the list state of `@panneau/core`: the items of the current page in a layout (table or\n * cards), with sorting, search, filters and their chips, pagination, selection and actions. It\n * fetches nothing: the caller gives the items of the list's query and their total.\n */\nexport function ListView({\n list,\n items,\n columns,\n total,\n isLoading = false,\n error = null,\n onRetry,\n filters = [],\n fields = [],\n search = false,\n layouts: layoutsProp = ['table'],\n layout: controlledLayout,\n onLayoutChange,\n perPageOptions,\n selectable: selectableProp,\n actions: actionsProp,\n onAction,\n previewAction,\n actionIcons,\n itemTitle,\n getItemLabel: getItemLabelProp,\n getItemHref,\n currentItemId = null,\n displays,\n layoutComponents,\n filterControls,\n toolbar,\n emptyMessage,\n 'aria-label': ariaLabel,\n className,\n}: ListViewProps) {\n const intl = usePanneauIntl();\n const toasts = useToast();\n const plugins = usePlugins();\n const { query, selection } = useListState(list);\n const filterLabels = useFilterLabels();\n const [uncontrolledLayout, setLayout] = useState<string | null>(null);\n const [confirming, setConfirming] = useState<ListActionEvent | null>(null);\n const [preview, setPreview] = useState<ConfirmPreview | null>(null);\n // The confirmation a dry run belongs to: a later one, or a cancel, discards its answer.\n const confirmation = useRef(0);\n const [pending, setPending] = useState<string | null>(null);\n\n const label = ariaLabel ?? intl.formatMessage(messages.list);\n const pageItems = items ?? [];\n const count = total ?? pageItems.length;\n const sort = query.sort ?? [];\n const filterValues = query.filter ?? {};\n const hasQuery = Object.keys(filterValues).length > 0 || (query.q ?? '') !== '';\n\n const allLayouts: Record<string, ListLayoutEntry> = {\n ...builtInLayouts,\n ...(Object.fromEntries(plugins.listLayouts) as Record<string, ListLayoutEntry>),\n ...layoutComponents,\n };\n // Layouts without a component (a plugin's that isn't installed) are left out.\n const available = layoutsProp.filter((id) => allLayouts[id] !== undefined);\n const layouts = available.length > 0 ? available : ['table'];\n const layout = controlledLayout ?? uncontrolledLayout ?? layouts[0] ?? 'table';\n const Layout = allLayouts[layout] ?? builtInLayouts.table;\n\n const grouped = groupListActions(actionsProp);\n const rowActions = grouped.row.filter((action) => hasScope(action, 'item'));\n const rowMenu = grouped.menu.filter((action) => hasScope(action, 'item'));\n // Actions placed in the menu also apply to selections, from the toolbar (once each).\n const toolbarActions = [...grouped.toolbar, ...grouped.menu].filter(\n (action, index, all) =>\n (hasScope(action, 'selection') || hasScope(action, 'resource')) &&\n all.findIndex((candidate) => candidate.id === action.id) === index,\n );\n const selectionActions = toolbarActions.filter((action) => hasScope(action, 'selection'));\n const resourceActions = toolbarActions.filter((action) => hasScope(action, 'resource'));\n const selectable = selectableProp ?? selectionActions.length > 0;\n\n const selectedCount = selectable ? countSelected(selection, count) : 0;\n const selectedItems = pageItems.filter((item) => isItemSelected(selection, item.id));\n const pageSelection = getPageSelection(selection, pageItems);\n\n const getItemLabel = (item: ListItem): string => {\n if (getItemLabelProp !== undefined) {\n return getItemLabelProp(item);\n }\n const titleColumn =\n columns.find((column) => column.id === itemTitle) ??\n (itemTitle === undefined ? columns[0] : undefined);\n const title =\n titleColumn !== undefined\n ? toText(getColumnValue(item, titleColumn, intl.locale), intl.locale)\n : itemTitle !== undefined\n ? toText(item[itemTitle], intl.locale)\n : '';\n return title !== '' ? title : item.id;\n };\n\n const renderValue = useRenderValue(displays);\n\n const closeConfirmation = () => {\n confirmation.current += 1;\n setConfirming(null);\n setPreview(null);\n };\n\n const execute = async (event: ListActionEvent) => {\n closeConfirmation();\n setPending(keyOf(event.action, event.item));\n // A promise chain rather than `try`, which the React Compiler only handles in part.\n await Promise.resolve()\n .then(() => onAction?.(event))\n .then((outcome) => {\n // `false`: the action didn't run (its parameters were cancelled).\n if (event.scope === 'selection' && outcome !== false) {\n list.clearSelection();\n }\n })\n .catch((caught: unknown) => {\n toasts.show({\n title: intl.formatMessage(messages.actionFailed, {\n action: event.action.label,\n }),\n ...(caught instanceof Error && caught.message !== ''\n ? { description: caught.message }\n : {}),\n tone: 'danger',\n });\n });\n setPending(null);\n };\n\n const run = (event: ListActionEvent) => {\n const { action, selection } = event;\n if (\n previewAction !== undefined &&\n action.dryRun === true &&\n selection !== undefined &&\n 'query' in selection\n ) {\n // Every item matching a query: only the backend knows how many it would skip.\n const current = ++confirmation.current;\n const asks = action.confirm !== undefined && action.confirm !== false;\n setConfirming(event);\n setPreview({ status: 'loading' });\n previewAction(event).then(\n (result) => {\n if (confirmation.current !== current) {\n return;\n }\n const skipped = result?.skipped ?? event.skipped.length;\n if (skipped === 0 && !asks) {\n void execute(event);\n } else {\n setPreview(result !== null ? { status: 'done', ...result } : null);\n }\n },\n () => {\n // Without an answer, the list confirms with what it knows.\n if (confirmation.current !== current) {\n return;\n }\n if (needsConfirmation(event)) {\n setPreview(null);\n } else {\n void execute(event);\n }\n },\n );\n return;\n }\n if (needsConfirmation(event)) {\n setConfirming(event);\n } else {\n void execute(event);\n }\n };\n\n const runOnItem = (action: Action, item: ListItem) =>\n run({ action, scope: 'item', item, count: 1, skipped: [] });\n\n const runOnSelection = (action: Action) => {\n const selected = list.getSelection();\n if (selected === null) {\n return;\n }\n run({\n action,\n scope: 'selection',\n selection: selected,\n count: selectedCount,\n skipped: selectedItems.filter((item) => !isAllowedOn(action, item)),\n });\n };\n\n const runOnResource = (action: Action) =>\n run({ action, scope: 'resource', count: count, skipped: [] });\n\n const renderActions = (item: ListItem): ReactNode => {\n const allowed = rowActions.filter((action) => isAllowedOn(action, item));\n const menu = rowMenu.filter((action) => isAllowedOn(action, item));\n if (allowed.length === 0 && menu.length === 0) {\n return null;\n }\n const running =\n pending?.endsWith(`\\u0000${item.id}`) === true ? pending.split('\\u0000')[0] : null;\n return (\n <RowActions\n item={item}\n itemLabel={getItemLabel(item)}\n actions={allowed}\n menu={menu}\n pending={running ?? null}\n onRun={(action) => runOnItem(action, item)}\n icons={actionIcons}\n />\n );\n };\n\n const pageCheckbox = (\n <Checkbox\n aria-label={intl.formatMessage(messages.selectPage)}\n isSelected={pageSelection === 'all'}\n isIndeterminate={pageSelection === 'some'}\n isDisabled={pageItems.length === 0}\n onChange={() => {\n const ids = pageItems.map((item) => item.id);\n if (pageSelection === 'all') {\n list.deselect(ids);\n } else {\n list.select(ids);\n }\n }}\n />\n );\n\n const sortable = columns.some((column) => column.sortable === true);\n const showToolbar =\n search ||\n filters.length > 0 ||\n sortable ||\n layouts.length > 1 ||\n resourceActions.length > 0 ||\n toolbar !== undefined;\n\n function clearFilters() {\n Object.keys(filterValues).forEach((id) => list.setFilter(id, undefined));\n if ((query.q ?? '') !== '') {\n list.setSearch('');\n }\n }\n\n const body = (() => {\n if (error !== null) {\n return (\n <Alert\n tone=\"danger\"\n title={intl.formatMessage(messages.loadFailed)}\n actions={\n onRetry !== undefined ? (\n <Button size=\"sm\" onPress={onRetry}>\n {intl.formatMessage(messages.retry)}\n </Button>\n ) : undefined\n }\n >\n {error.message}\n </Alert>\n );\n }\n if (items === undefined) {\n return (\n <ListSkeleton\n Layout={Layout}\n columns={columns}\n perPage={query.perPage}\n sort={sort}\n label={label}\n />\n );\n }\n if (pageItems.length === 0) {\n return (\n <div className={styles.state}>\n <p>\n {hasQuery\n ? intl.formatMessage(messages.noResults)\n : (emptyMessage ?? intl.formatMessage(messages.empty))}\n </p>\n {hasQuery ? (\n <Button size=\"sm\" onPress={() => clearFilters()}>\n {intl.formatMessage(messages.clearFilters)}\n </Button>\n ) : null}\n </div>\n );\n }\n return (\n <Layout\n items={pageItems}\n columns={columns}\n renderValue={renderValue}\n getItemLabel={getItemLabel}\n getItemHref={getItemHref}\n isCurrent={(item) => item.id === currentItemId}\n selectable={selectable}\n isSelected={(item) => isItemSelected(selection, item.id)}\n onToggle={(item) => list.toggle(item.id)}\n renderActions={renderActions}\n sort={sort}\n onSort={(column) => list.toggleSort(column.id)}\n label={label}\n pageSelection={pageCheckbox}\n />\n );\n })();\n\n return (\n <div className={cx(styles.list, className)}>\n {showToolbar ? (\n <div className={styles.toolbar}>\n <div className={styles.toolbarStart}>\n {search ? (\n <SearchField\n value={query.q ?? ''}\n onChange={(q) => list.setSearch(q)}\n />\n ) : null}\n {filters.length > 0 ? (\n <FilterControls\n filters={filters}\n values={filterValues}\n onChange={(id, value) => list.setFilter(id, value)}\n onLabel={filterLabels.remember}\n controls={filterControls}\n columns={columns}\n fields={fields}\n labels={filterLabels.labels}\n />\n ) : null}\n </div>\n <div className={styles.toolbarEnd}>\n {sortable ? (\n <div className={layout === 'table' ? styles.tableSort : undefined}>\n <SortSelect\n columns={columns}\n sort={sort}\n onChange={(next) => list.setSort(next)}\n />\n </div>\n ) : null}\n {layouts.length > 1 ? (\n <LayoutSwitch\n layouts={layouts}\n value={layout}\n onChange={(next) => {\n setLayout(next);\n onLayoutChange?.(next);\n }}\n />\n ) : null}\n {resourceActions\n .filter(\n (action) => selectedCount === 0 || !hasScope(action, 'selection'),\n )\n .map((action) => (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={getActionHref(action)}\n isPending={pending === keyOf(action)}\n onPress={() => runOnResource(action)}\n />\n ))}\n {toolbar}\n </div>\n </div>\n ) : null}\n <FilterChips\n filters={filters}\n values={filterValues}\n q={query.q}\n onRemove={(id) => list.setFilter(id, undefined)}\n onClearSearch={() => list.setSearch('')}\n onClear={clearFilters}\n columns={columns}\n fields={fields}\n labels={filterLabels.labels}\n />\n {selectedCount > 0 ? (\n <div className={styles.selection}>\n <span className={styles.selectionCount} role=\"status\">\n {selection.mode === 'all'\n ? intl.formatMessage(messages.allMatchingSelected, {\n total: selectedCount,\n })\n : intl.formatMessage(messages.selectedCount, { count: selectedCount })}\n </span>\n {selection.mode === 'ids' &&\n pageSelection === 'all' &&\n count > pageItems.length ? (\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.selectAllMatching()}>\n {intl.formatMessage(messages.selectAllMatching, { total: count })}\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.clearSelection()}>\n {intl.formatMessage(messages.clearSelection)}\n </Button>\n {selectionActions.length > 0 ? (\n <div className={styles.selectionActions}>\n {selectionActions.map((action) => {\n const skipped = selectedItems.filter(\n (item) => !isAllowedOn(action, item),\n ).length;\n return (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={null}\n isPending={pending === keyOf(action)}\n isDisabled={\n (pending !== null && pending !== keyOf(action)) ||\n skipped >= selectedCount\n }\n onPress={() => runOnSelection(action)}\n />\n );\n })}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className={styles.body} aria-busy={isLoading && items !== undefined}>\n {body}\n </div>\n {total !== undefined && error === null && total > 0 ? (\n <Pagination\n page={query.page ?? 1}\n perPage={query.perPage ?? pageItems.length}\n total={total}\n onPageChange={(page) => list.setPage(page)}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : null}\n <ConfirmDialog\n event={confirming}\n preview={preview}\n onConfirm={(event) => void execute(event)}\n onCancel={closeConfirmation}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListView.js","names":["ReactNode","useRef","useState","List","usePlugins","Action","Field","Filter","Alert","Button","Checkbox","usePanneauIntl","useToast","ListSkeleton","styles","ActionButton","ConfirmDialog","ConfirmPreview","needsConfirmation","RowActions","ListActions","getActionHref","groupListActions","hasScope","isAllowedOn","ActionIcons","cx","FilterChips","FilterControls","useFilterLabels","builtInLayouts","messages","countSelected","getPageSelection","isItemSelected","LayoutSwitch","CursorPagination","Pagination","SearchField","SortSelect","DisplayEntry","FilterEntry","ListActionEvent","ListActionHandler","ListActionPreviewer","ListColumn","ListItem","ListLayoutEntry","useListState","useRenderValue","getColumnValue","toText","ListViewProps","list","items","columns","total","cursors","next","previous","isLoading","error","Error","onRetry","filters","fields","search","layouts","layout","onLayoutChange","perPageOptions","selectable","actions","onAction","previewAction","actionIcons","itemTitle","getItemLabel","item","getItemHref","currentItemId","displays","Readonly","Record","layoutComponents","filterControls","toolbar","emptyMessage","className","keyOf","action","undefined","id","ListView","t0","$","_c","t1","t2","t3","t4","t5","t6","controlledLayout","selectableProp","actionsProp","getItemLabelProp","t7","ariaLabel","t8","t9","t10","layoutsProp","intl","toasts","plugins","query","selection","filterLabels","uncontrolledLayout","setLayout","confirming","setConfirming","preview","setPreview","confirmation","pending","setPending","t11","formatMessage","label","pageItems","count","length","t12","sort","t13","filter","filterValues","t14","q","Object","keys","hasQuery","t15","listLayouts","fromEntries","t16","t17","allLayouts","t18","t19","available","Layout","table","grouped","rowActions","row","_temp","rowMenu","menu","_temp2","toolbarActions","_temp3","selectionActions","_temp4","resourceActions","_temp5","selectedCount","t20","selectedItems","pageSelection","t21","locale","item_0","titleColumn","find","column","title","renderValue","closeConfirmation","current","execute","event","Promise","resolve","then","outcome","scope","clearSelection","catch","caught","show","actionFailed","message","description","tone","run","event_0","action_4","selection_0","dryRun","asks","confirm","status","result","skipped","runOnItem","action_5","item_1","runOnSelection","action_6","selected","getSelection","item_2","runOnResource","action_7","renderActions","item_3","allowed","action_8","action_9","running","endsWith","split","action_10","t22","selectPage","pageCheckbox","ids","map","_temp6","deselect","select","sortable","some","_temp7","showToolbar","t23","clearFilters","forEach","id_0","setFilter","setSearch","t24","bb0","t25","loadFailed","t26","retry","t27","perPage","noResults","empty","t28","state","item_5","item_6","item_7","toggle","column_1","toggleSort","body","toolbarStart","id_1","value","remember","labels","toolbarEnd","tableSort","setSort","next_0","action_11","action_12","id_2","t29","t30","selectionCount","mode","allMatchingSelected","selectAllMatching","action_13","skipped_0","item_8","t31","t32","t33","cursor","page","previousPage","nextPage","setPerPage","setPage","perPage_0","t34","event_1","t35","t36","column_0","item_4","action_3","action_2","action_1","index","all","findIndex","candidate","action_0","_c","styles"],"sources":["../src/ListView.tsx"],"sourcesContent":["import { type ReactNode, useRef, useState } from 'react';\n\nimport type { List } from '@panneau/core';\nimport { usePlugins } from '@panneau/core';\nimport type { Action, Field, Filter } from '@panneau/protocol';\nimport { Alert, Button, Checkbox, usePanneauIntl, useToast } from '@panneau/ui';\n\nimport { ListSkeleton } from './ListSkeleton';\nimport styles from './ListView.module.css';\nimport { ActionButton } from './actions/ActionButton';\nimport { ConfirmDialog, type ConfirmPreview, needsConfirmation } from './actions/ConfirmDialog';\nimport { RowActions } from './actions/RowActions';\nimport {\n type ListActions,\n getActionHref,\n groupListActions,\n hasScope,\n isAllowedOn,\n} from './actions/actions';\nimport type { ActionIcons } from './actions/icons';\nimport { cx } from './cx';\nimport { FilterChips, FilterControls, useFilterLabels } from './filters/Filters';\nimport { builtInLayouts } from './layouts/builtIn';\nimport { messages } from './messages';\nimport { countSelected, getPageSelection, isItemSelected } from './selection';\nimport { LayoutSwitch } from './toolbar/LayoutSwitch';\nimport { CursorPagination, Pagination } from './toolbar/Pagination';\nimport { SearchField } from './toolbar/SearchField';\nimport { SortSelect } from './toolbar/SortSelect';\nimport type {\n DisplayEntry,\n FilterEntry,\n ListActionEvent,\n ListActionHandler,\n ListActionPreviewer,\n ListColumn,\n ListItem,\n ListLayoutEntry,\n} from './types';\nimport { useListState } from './useListState';\nimport { useRenderValue } from './useRenderValue';\nimport { getColumnValue, toText } from './values';\n\nexport interface ListViewProps {\n /** The list state of `@panneau/core` (`useList()`): query and selection. */\n list: List;\n /**\n * The items of the current page. `undefined` while they load for the first time: the list\n * draws a skeleton of its rows, from its columns and its page size.\n */\n items: readonly ListItem[] | undefined;\n columns: readonly ListColumn[];\n /**\n * How many items match the query, on every page (`meta.total`). With it, the list shows\n * pagination and offers to select every matching item. Without it, `items` is the whole list.\n */\n total?: number | undefined;\n /**\n * The cursors of the page, for a list paged with cursors (`nextCursor` and `previousCursor`\n * of its `meta`): the list then has buttons to the previous and next pages, without page\n * numbers or a total, and doesn't offer to select every matching item.\n */\n cursors?: { next: string | null; previous?: string | null | undefined } | undefined;\n /** Shows that items are loading. Items already shown stay, dimmed. */\n isLoading?: boolean;\n /** An error while loading: an alert with a retry replaces the items. */\n error?: Error | null;\n onRetry?: () => void;\n /** Filter controls, with chips for the active filters. */\n filters?: readonly Filter[];\n /** Fields of the items, for the labels and options of filters that are not columns. */\n fields?: readonly Field[];\n /** Shows a search field (`q`). */\n search?: boolean;\n /** Layouts to choose from, the first one being the default. Defaults to `['table']`. */\n layouts?: readonly string[];\n /** The layout, controlled. */\n layout?: string;\n onLayoutChange?: (layout: string) => void;\n /** Page sizes to choose from. */\n perPageOptions?: readonly number[];\n /** Shows checkboxes. Defaults to whether there are selection actions. */\n selectable?: boolean;\n /**\n * Actions: a list (placed by their `placement`, or by scope), or grouped by placement as\n * `resolveList()` does. Those the user can't run (`abilities.run`) are hidden.\n */\n actions?: ListActions;\n /** Runs an action, after its confirmation. */\n onAction?: ListActionHandler;\n /**\n * Asks the backend how many items of a query selection (\"Select all N items\") an action will\n * skip, before the confirmation: the list only knows the abilities of the current page. Only\n * for actions with `dryRun`. `useActionPreview()` of `@panneau/actions` is one.\n */\n previewAction?: ListActionPreviewer;\n /**\n * Icons of actions by action id (`{ archive: Archive }`), for actions written in code. They\n * win over the Lucide icon an action names (`\"icon\": \"archive\"`).\n */\n actionIcons?: ActionIcons;\n /** The field that titles items, for their label (`itemTitle` of the resource). */\n itemTitle?: string;\n /** The label of an item, for checkboxes and actions. Defaults to its title, then its id. */\n getItemLabel?: (item: ListItem) => string;\n /** A link to an item, on its title. */\n getItemHref?: (item: ListItem) => string | null;\n /**\n * The item shown next to the list, such as in a panel of its details: its row is marked, and\n * the link of its title is the current page.\n */\n currentItemId?: string | null;\n /** Displays by name, over the built-in ones and those of the plugins. */\n displays?: Readonly<Record<string, DisplayEntry>>;\n /** Layouts by id, over the built-in ones and those of the plugins. */\n layoutComponents?: Readonly<Record<string, ListLayoutEntry>>;\n /** Filter controls by filter type, over the built-in ones. */\n filterControls?: Readonly<Record<string, FilterEntry>>;\n /** Content at the end of the toolbar, such as a button to create an item. */\n toolbar?: ReactNode;\n /** Shown when the list has no items, without filters or search. */\n emptyMessage?: ReactNode;\n /** Accessible name of the list. Defaults to \"Items\". */\n 'aria-label'?: string;\n className?: string;\n}\n\nfunction keyOf(action: Action, item?: ListItem): string {\n return item !== undefined ? `${action.id}\\u0000${item.id}` : action.id;\n}\n\n/**\n * Renders the list state of `@panneau/core`: the items of the current page in a layout (table or\n * cards), with sorting, search, filters and their chips, pagination, selection and actions. It\n * fetches nothing: the caller gives the items of the list's query and their total.\n */\nexport function ListView({\n list,\n items,\n columns,\n total,\n cursors,\n isLoading = false,\n error = null,\n onRetry,\n filters = [],\n fields = [],\n search = false,\n layouts: layoutsProp = ['table'],\n layout: controlledLayout,\n onLayoutChange,\n perPageOptions,\n selectable: selectableProp,\n actions: actionsProp,\n onAction,\n previewAction,\n actionIcons,\n itemTitle,\n getItemLabel: getItemLabelProp,\n getItemHref,\n currentItemId = null,\n displays,\n layoutComponents,\n filterControls,\n toolbar,\n emptyMessage,\n 'aria-label': ariaLabel,\n className,\n}: ListViewProps) {\n const intl = usePanneauIntl();\n const toasts = useToast();\n const plugins = usePlugins();\n const { query, selection } = useListState(list);\n const filterLabels = useFilterLabels();\n const [uncontrolledLayout, setLayout] = useState<string | null>(null);\n const [confirming, setConfirming] = useState<ListActionEvent | null>(null);\n const [preview, setPreview] = useState<ConfirmPreview | null>(null);\n // The confirmation a dry run belongs to: a later one, or a cancel, discards its answer.\n const confirmation = useRef(0);\n const [pending, setPending] = useState<string | null>(null);\n\n const label = ariaLabel ?? intl.formatMessage(messages.list);\n const pageItems = items ?? [];\n const count = total ?? pageItems.length;\n const sort = query.sort ?? [];\n const filterValues = query.filter ?? {};\n const hasQuery = Object.keys(filterValues).length > 0 || (query.q ?? '') !== '';\n\n const allLayouts: Record<string, ListLayoutEntry> = {\n ...builtInLayouts,\n ...(Object.fromEntries(plugins.listLayouts) as Record<string, ListLayoutEntry>),\n ...layoutComponents,\n };\n // Layouts without a component (a plugin's that isn't installed) are left out.\n const available = layoutsProp.filter((id) => allLayouts[id] !== undefined);\n const layouts = available.length > 0 ? available : ['table'];\n const layout = controlledLayout ?? uncontrolledLayout ?? layouts[0] ?? 'table';\n const Layout = allLayouts[layout] ?? builtInLayouts.table;\n\n const grouped = groupListActions(actionsProp);\n const rowActions = grouped.row.filter((action) => hasScope(action, 'item'));\n const rowMenu = grouped.menu.filter((action) => hasScope(action, 'item'));\n // Actions placed in the menu also apply to selections, from the toolbar (once each).\n const toolbarActions = [...grouped.toolbar, ...grouped.menu].filter(\n (action, index, all) =>\n (hasScope(action, 'selection') || hasScope(action, 'resource')) &&\n all.findIndex((candidate) => candidate.id === action.id) === index,\n );\n const selectionActions = toolbarActions.filter((action) => hasScope(action, 'selection'));\n const resourceActions = toolbarActions.filter((action) => hasScope(action, 'resource'));\n const selectable = selectableProp ?? selectionActions.length > 0;\n\n const selectedCount = selectable ? countSelected(selection, count) : 0;\n const selectedItems = pageItems.filter((item) => isItemSelected(selection, item.id));\n const pageSelection = getPageSelection(selection, pageItems);\n\n const getItemLabel = (item: ListItem): string => {\n if (getItemLabelProp !== undefined) {\n return getItemLabelProp(item);\n }\n const titleColumn =\n columns.find((column) => column.id === itemTitle) ??\n (itemTitle === undefined ? columns[0] : undefined);\n const title =\n titleColumn !== undefined\n ? toText(getColumnValue(item, titleColumn, intl.locale), intl.locale)\n : itemTitle !== undefined\n ? toText(item[itemTitle], intl.locale)\n : '';\n return title !== '' ? title : item.id;\n };\n\n const renderValue = useRenderValue(displays);\n\n const closeConfirmation = () => {\n confirmation.current += 1;\n setConfirming(null);\n setPreview(null);\n };\n\n const execute = async (event: ListActionEvent) => {\n closeConfirmation();\n setPending(keyOf(event.action, event.item));\n // A promise chain rather than `try`, which the React Compiler only handles in part.\n await Promise.resolve()\n .then(() => onAction?.(event))\n .then((outcome) => {\n // `false`: the action didn't run (its parameters were cancelled).\n if (event.scope === 'selection' && outcome !== false) {\n list.clearSelection();\n }\n })\n .catch((caught: unknown) => {\n toasts.show({\n title: intl.formatMessage(messages.actionFailed, {\n action: event.action.label,\n }),\n ...(caught instanceof Error && caught.message !== ''\n ? { description: caught.message }\n : {}),\n tone: 'danger',\n });\n });\n setPending(null);\n };\n\n const run = (event: ListActionEvent) => {\n const { action, selection } = event;\n if (\n previewAction !== undefined &&\n action.dryRun === true &&\n selection !== undefined &&\n 'query' in selection\n ) {\n // Every item matching a query: only the backend knows how many it would skip.\n const current = ++confirmation.current;\n const asks = action.confirm !== undefined && action.confirm !== false;\n setConfirming(event);\n setPreview({ status: 'loading' });\n previewAction(event).then(\n (result) => {\n if (confirmation.current !== current) {\n return;\n }\n const skipped = result?.skipped ?? event.skipped.length;\n if (skipped === 0 && !asks) {\n void execute(event);\n } else {\n setPreview(result !== null ? { status: 'done', ...result } : null);\n }\n },\n () => {\n // Without an answer, the list confirms with what it knows.\n if (confirmation.current !== current) {\n return;\n }\n if (needsConfirmation(event)) {\n setPreview(null);\n } else {\n void execute(event);\n }\n },\n );\n return;\n }\n if (needsConfirmation(event)) {\n setConfirming(event);\n } else {\n void execute(event);\n }\n };\n\n const runOnItem = (action: Action, item: ListItem) =>\n run({ action, scope: 'item', item, count: 1, skipped: [] });\n\n const runOnSelection = (action: Action) => {\n const selected = list.getSelection();\n if (selected === null) {\n return;\n }\n run({\n action,\n scope: 'selection',\n selection: selected,\n count: selectedCount,\n skipped: selectedItems.filter((item) => !isAllowedOn(action, item)),\n });\n };\n\n const runOnResource = (action: Action) =>\n run({ action, scope: 'resource', count: count, skipped: [] });\n\n const renderActions = (item: ListItem): ReactNode => {\n const allowed = rowActions.filter((action) => isAllowedOn(action, item));\n const menu = rowMenu.filter((action) => isAllowedOn(action, item));\n if (allowed.length === 0 && menu.length === 0) {\n return null;\n }\n const running =\n pending?.endsWith(`\\u0000${item.id}`) === true ? pending.split('\\u0000')[0] : null;\n return (\n <RowActions\n item={item}\n itemLabel={getItemLabel(item)}\n actions={allowed}\n menu={menu}\n pending={running ?? null}\n onRun={(action) => runOnItem(action, item)}\n icons={actionIcons}\n />\n );\n };\n\n const pageCheckbox = (\n <Checkbox\n aria-label={intl.formatMessage(messages.selectPage)}\n isSelected={pageSelection === 'all'}\n isIndeterminate={pageSelection === 'some'}\n isDisabled={pageItems.length === 0}\n onChange={() => {\n const ids = pageItems.map((item) => item.id);\n if (pageSelection === 'all') {\n list.deselect(ids);\n } else {\n list.select(ids);\n }\n }}\n />\n );\n\n const sortable = columns.some((column) => column.sortable === true);\n const showToolbar =\n search ||\n filters.length > 0 ||\n sortable ||\n layouts.length > 1 ||\n resourceActions.length > 0 ||\n toolbar !== undefined;\n\n function clearFilters() {\n Object.keys(filterValues).forEach((id) => list.setFilter(id, undefined));\n if ((query.q ?? '') !== '') {\n list.setSearch('');\n }\n }\n\n const body = (() => {\n if (error !== null) {\n return (\n <Alert\n tone=\"danger\"\n title={intl.formatMessage(messages.loadFailed)}\n actions={\n onRetry !== undefined ? (\n <Button size=\"sm\" onPress={onRetry}>\n {intl.formatMessage(messages.retry)}\n </Button>\n ) : undefined\n }\n >\n {error.message}\n </Alert>\n );\n }\n if (items === undefined) {\n return (\n <ListSkeleton\n Layout={Layout}\n columns={columns}\n perPage={query.perPage}\n sort={sort}\n label={label}\n />\n );\n }\n if (pageItems.length === 0) {\n return (\n <div className={styles.state}>\n <p>\n {hasQuery\n ? intl.formatMessage(messages.noResults)\n : (emptyMessage ?? intl.formatMessage(messages.empty))}\n </p>\n {hasQuery ? (\n <Button size=\"sm\" onPress={() => clearFilters()}>\n {intl.formatMessage(messages.clearFilters)}\n </Button>\n ) : null}\n </div>\n );\n }\n return (\n <Layout\n items={pageItems}\n columns={columns}\n renderValue={renderValue}\n getItemLabel={getItemLabel}\n getItemHref={getItemHref}\n isCurrent={(item) => item.id === currentItemId}\n selectable={selectable}\n isSelected={(item) => isItemSelected(selection, item.id)}\n onToggle={(item) => list.toggle(item.id)}\n renderActions={renderActions}\n sort={sort}\n onSort={(column) => list.toggleSort(column.id)}\n label={label}\n pageSelection={pageCheckbox}\n />\n );\n })();\n\n return (\n <div className={cx(styles.list, className)}>\n {showToolbar ? (\n <div className={styles.toolbar}>\n <div className={styles.toolbarStart}>\n {search ? (\n <SearchField\n value={query.q ?? ''}\n onChange={(q) => list.setSearch(q)}\n />\n ) : null}\n {filters.length > 0 ? (\n <FilterControls\n filters={filters}\n values={filterValues}\n onChange={(id, value) => list.setFilter(id, value)}\n onLabel={filterLabels.remember}\n controls={filterControls}\n columns={columns}\n fields={fields}\n labels={filterLabels.labels}\n />\n ) : null}\n </div>\n <div className={styles.toolbarEnd}>\n {sortable ? (\n <div className={layout === 'table' ? styles.tableSort : undefined}>\n <SortSelect\n columns={columns}\n sort={sort}\n onChange={(next) => list.setSort(next)}\n />\n </div>\n ) : null}\n {layouts.length > 1 ? (\n <LayoutSwitch\n layouts={layouts}\n value={layout}\n onChange={(next) => {\n setLayout(next);\n onLayoutChange?.(next);\n }}\n />\n ) : null}\n {resourceActions\n .filter(\n (action) => selectedCount === 0 || !hasScope(action, 'selection'),\n )\n .map((action) => (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={getActionHref(action)}\n isPending={pending === keyOf(action)}\n onPress={() => runOnResource(action)}\n />\n ))}\n {toolbar}\n </div>\n </div>\n ) : null}\n <FilterChips\n filters={filters}\n values={filterValues}\n q={query.q}\n onRemove={(id) => list.setFilter(id, undefined)}\n onClearSearch={() => list.setSearch('')}\n onClear={clearFilters}\n columns={columns}\n fields={fields}\n labels={filterLabels.labels}\n />\n {selectedCount > 0 ? (\n <div className={styles.selection}>\n <span className={styles.selectionCount} role=\"status\">\n {selection.mode === 'all'\n ? intl.formatMessage(messages.allMatchingSelected, {\n total: selectedCount,\n })\n : intl.formatMessage(messages.selectedCount, { count: selectedCount })}\n </span>\n {selection.mode === 'ids' &&\n pageSelection === 'all' &&\n count > pageItems.length ? (\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.selectAllMatching()}>\n {intl.formatMessage(messages.selectAllMatching, { total: count })}\n </Button>\n ) : null}\n <Button size=\"sm\" variant=\"ghost\" onPress={() => list.clearSelection()}>\n {intl.formatMessage(messages.clearSelection)}\n </Button>\n {selectionActions.length > 0 ? (\n <div className={styles.selectionActions}>\n {selectionActions.map((action) => {\n const skipped = selectedItems.filter(\n (item) => !isAllowedOn(action, item),\n ).length;\n return (\n <ActionButton\n key={action.id}\n action={action}\n icons={actionIcons}\n size=\"md\"\n href={null}\n isPending={pending === keyOf(action)}\n isDisabled={\n (pending !== null && pending !== keyOf(action)) ||\n skipped >= selectedCount\n }\n onPress={() => runOnSelection(action)}\n />\n );\n })}\n </div>\n ) : null}\n </div>\n ) : null}\n <div className={styles.body} aria-busy={isLoading && items !== undefined}>\n {body}\n </div>\n {cursors !== undefined && error === null ? (\n <CursorPagination\n perPage={query.perPage ?? pageItems.length}\n hasPrevious={query.cursor !== undefined}\n hasNext={cursors.next !== null}\n onPrevious={() => list.previousPage(cursors.previous)}\n onNext={() => {\n if (cursors.next !== null) {\n list.nextPage(cursors.next);\n }\n }}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : total !== undefined && error === null && total > 0 ? (\n <Pagination\n page={query.page ?? 1}\n perPage={query.perPage ?? pageItems.length}\n total={total}\n onPageChange={(page) => list.setPage(page)}\n perPageOptions={perPageOptions}\n onPerPageChange={(perPage) => list.setPerPage(perPage)}\n />\n ) : null}\n <ConfirmDialog\n event={confirming}\n preview={preview}\n onConfirm={(event) => void execute(event)}\n onCancel={closeConfirmation}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import type { DisplayEntry, DisplayProps } from '../types.js';
|
|
2
2
|
/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */
|
|
3
3
|
export declare function EmptyValue(): import("react").JSX.Element;
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Text, on two lines at most. The default display. The value of a `secret` text field
|
|
6
|
+
* (`settings.secret`) shows as dots, never in clear.
|
|
7
|
+
*/
|
|
8
|
+
export declare function TextDisplay({ value, field }: DisplayProps): import("react").JSX.Element;
|
|
6
9
|
/** HTML as plain text. */
|
|
7
10
|
export declare function RichTextDisplay({ value }: DisplayProps): import("react").JSX.Element;
|
|
8
11
|
/** A number, in the format of the locale. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../src/displays/displays.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI3D,kGAAkG;AAClG,wBAAgB,UAAU,gCAMzB;AAWD
|
|
1
|
+
{"version":3,"file":"displays.d.ts","sourceRoot":"","sources":["../../src/displays/displays.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI3D,kGAAkG;AAClG,wBAAgB,UAAU,gCAMzB;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAczD;AAED,0BAA0B;AAC1B,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAStD;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAQpD;AAED,4CAA4C;AAC5C,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAcrD;AAkBD,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAOlD;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAWtD;AAED,4DAA4D;AAC5D,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAQlD;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAkB3D;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUtD;AAED,iCAAiC;AACjC,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASjD;AAED,mCAAmC;AACnC,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASnD;AAED,0CAA0C;AAC1C,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BASjD;AAED,yFAAyF;AACzF,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAM7D;AAED,mCAAmC;AACnC,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUlD;AAED,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,YAAY,+BAezD;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAuBnD;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAkBtD;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAUnD;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,+BAenD;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAuBlE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { messages } from "../messages.js";
|
|
2
|
-
import {
|
|
2
|
+
import { findOption, getFieldOptions, toText } from "../values.js";
|
|
3
3
|
import Displays_module_default from "./Displays.module.js";
|
|
4
4
|
import { c } from "react/compiler-runtime";
|
|
5
5
|
import { Badge, Icon, usePanneauIntl } from "@panneau/ui";
|
|
@@ -25,10 +25,13 @@ function EmptyValue() {
|
|
|
25
25
|
function isEmpty(value) {
|
|
26
26
|
return value === null || value === void 0 || value === "" || Array.isArray(value) && value.length === 0;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* Text, on two lines at most. The default display. The value of a `secret` text field
|
|
30
|
+
* (`settings.secret`) shows as dots, never in clear.
|
|
31
|
+
*/
|
|
29
32
|
function TextDisplay(t0) {
|
|
30
|
-
const $ = c(
|
|
31
|
-
const { value } = t0;
|
|
33
|
+
const $ = c(10);
|
|
34
|
+
const { value, field } = t0;
|
|
32
35
|
const intl = usePanneauIntl();
|
|
33
36
|
let t1;
|
|
34
37
|
if ($[0] !== intl.locale || $[1] !== value) {
|
|
@@ -38,15 +41,42 @@ function TextDisplay(t0) {
|
|
|
38
41
|
$[2] = t1;
|
|
39
42
|
} else t1 = $[2];
|
|
40
43
|
const text = t1;
|
|
44
|
+
if (text === "") {
|
|
45
|
+
let t2;
|
|
46
|
+
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
|
47
|
+
t2 = /* @__PURE__ */ jsx(EmptyValue, {});
|
|
48
|
+
$[3] = t2;
|
|
49
|
+
} else t2 = $[3];
|
|
50
|
+
return t2;
|
|
51
|
+
}
|
|
52
|
+
if (field?.settings?.secret === true) {
|
|
53
|
+
let t2;
|
|
54
|
+
if ($[4] !== intl) {
|
|
55
|
+
t2 = intl.formatMessage(messages.secretValue);
|
|
56
|
+
$[4] = intl;
|
|
57
|
+
$[5] = t2;
|
|
58
|
+
} else t2 = $[5];
|
|
59
|
+
let t3;
|
|
60
|
+
if ($[6] !== t2) {
|
|
61
|
+
t3 = /* @__PURE__ */ jsx("span", {
|
|
62
|
+
role: "img",
|
|
63
|
+
"aria-label": t2,
|
|
64
|
+
children: "••••••••"
|
|
65
|
+
});
|
|
66
|
+
$[6] = t2;
|
|
67
|
+
$[7] = t3;
|
|
68
|
+
} else t3 = $[7];
|
|
69
|
+
return t3;
|
|
70
|
+
}
|
|
41
71
|
let t2;
|
|
42
|
-
if ($[
|
|
43
|
-
t2 =
|
|
72
|
+
if ($[8] !== text) {
|
|
73
|
+
t2 = /* @__PURE__ */ jsx("span", {
|
|
44
74
|
className: Displays_module_default.text,
|
|
45
75
|
children: text
|
|
46
76
|
});
|
|
47
|
-
$[
|
|
48
|
-
$[
|
|
49
|
-
} else t2 = $[
|
|
77
|
+
$[8] = text;
|
|
78
|
+
$[9] = t2;
|
|
79
|
+
} else t2 = $[9];
|
|
50
80
|
return t2;
|
|
51
81
|
}
|
|
52
82
|
/** HTML as plain text. */
|
|
@@ -325,7 +355,13 @@ function SelectDisplay(t0) {
|
|
|
325
355
|
break bb0;
|
|
326
356
|
}
|
|
327
357
|
t1 = Displays_module_default.badges;
|
|
328
|
-
t2 = values.map((entry) =>
|
|
358
|
+
t2 = values.map((entry) => {
|
|
359
|
+
const option = findOption(options, entry);
|
|
360
|
+
return /* @__PURE__ */ jsx(Badge, {
|
|
361
|
+
tone: option?.tone ?? "neutral",
|
|
362
|
+
children: option?.label ?? String(entry)
|
|
363
|
+
}, String(entry));
|
|
364
|
+
});
|
|
329
365
|
}
|
|
330
366
|
$[0] = field;
|
|
331
367
|
$[1] = value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displays.js","names":["Check","Minus","toReferences","formatDuration","Badge","Icon","usePanneauIntl","messages","DisplayEntry","DisplayProps","getFieldOptions","getOptionLabel","toText","styles","EmptyValue","$","_c","t0","Symbol","for","empty","isEmpty","value","undefined","Array","isArray","length","TextDisplay","intl","t1","locale","text","t2","RichTextDisplay","replace","trim","NumberDisplay","number","Number","NaN","isNaN","formatNumber","BooleanDisplay","checked","boolean","true","false","t3","formatMessage","yes","no","t4","t5","DATE_ONLY","TIME_ONLY","parseDate","Date","day","exec","date","getTime","DateDisplay","bb0","String","formatDate","dateStyle","DateTimeDisplay","timeStyle","TimeDisplay","match","formatTime","SelectDisplay","field","options","values","badges","map","entry","RelationDisplay","references","_temp","join","reference","label","UrlDisplay","link","EmailDisplay","TelDisplay","DurationDisplay","precision","settings","JsonDisplay","json","JSON","stringify","code","slice","TagsDisplay","tags","filter","_temp2","tag_0","tag","find","option","EmbedDisplay","url","title","thumbnailUrl","thumbnail","media","LocationDisplay","lat","lng","address","maximumFractionDigits","format","ColorDisplay","swatch","backgroundColor","color","MediaDisplay","name","filename","Record","source","builtInDisplays","Readonly","textarea","slug","richtext","datetime","time","select","relation","email","tel","range","duration","embed","location","_c","styles"],"sources":["../../src/displays/displays.tsx"],"sourcesContent":["import { Check, Minus } from 'lucide-react';\n\nimport { toReferences } from '@panneau/fields';\nimport { formatDuration } from '@panneau/fields/duration';\nimport { Badge, Icon, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { DisplayEntry, DisplayProps } from '../types';\nimport { getFieldOptions, getOptionLabel, toText } from '../values';\nimport styles from './Displays.module.css';\n\n/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */\nexport function EmptyValue() {\n return (\n <span className={styles.empty} aria-hidden=\"true\">\n —\n </span>\n );\n}\n\nfunction isEmpty(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n );\n}\n\n/** Text, on two lines at most. The default display. */\nexport function TextDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const text = toText(value, intl.locale);\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** HTML as plain text. */\nexport function RichTextDisplay({ value }: DisplayProps) {\n const text =\n typeof value === 'string'\n ? value\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : '';\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** A number, in the format of the locale. */\nexport function NumberDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const number =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n if (Number.isNaN(number) || isEmpty(value)) {\n return <EmptyValue />;\n }\n return <span className={styles.number}>{intl.formatNumber(number)}</span>;\n}\n\n/** Yes or no, as an icon with its label. */\nexport function BooleanDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || value === undefined) {\n return <EmptyValue />;\n }\n const checked = value === true || value === 1 || value === 'true' || value === '1';\n return (\n <span className={`${styles.boolean} ${checked ? styles.true : styles.false}`}>\n <Icon\n icon={checked ? Check : Minus}\n label={intl.formatMessage(checked ? messages.yes : messages.no)}\n />\n </span>\n );\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst TIME_ONLY = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\n/** A date (`2026-10-15`) as a local date, so that it doesn't move with the time zone. */\nfunction parseDate(value: unknown): Date | null {\n if (typeof value !== 'string' || value === '') {\n return null;\n }\n const day = DATE_ONLY.exec(value);\n const date =\n day !== null\n ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]))\n : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/** A date, in the format of the locale. */\nexport function DateDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return <time dateTime={String(value)}>{intl.formatDate(date, { dateStyle: 'medium' })}</time>;\n}\n\n/** A date and a time, in the format and the time zone of the user. */\nexport function DateTimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return (\n <time dateTime={String(value)}>\n {intl.formatDate(date, { dateStyle: 'medium', timeStyle: 'short' })}\n </time>\n );\n}\n\n/** A time of day (`14:30`), in the format of the locale. */\nexport function TimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const match = typeof value === 'string' ? TIME_ONLY.exec(value) : null;\n if (match === null) {\n return <EmptyValue />;\n }\n const date = new Date(2000, 0, 1, Number(match[1]), Number(match[2]), Number(match[3] ?? 0));\n return <time dateTime={String(value)}>{intl.formatTime(date, { timeStyle: 'short' })}</time>;\n}\n\n/** The labels of the selected options, as badges. */\nexport function SelectDisplay({ value, field }: DisplayProps) {\n const options = getFieldOptions(field);\n const values: unknown[] = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];\n if (values.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.badges}>\n {values.map((entry) => (\n <Badge key={String(entry)}>{getOptionLabel(options, entry) ?? String(entry)}</Badge>\n ))}\n </span>\n );\n}\n\n/** The labels of related items. */\nexport function RelationDisplay({ value }: DisplayProps) {\n const references = toReferences(value);\n if (references.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.text}>\n {references.map((reference) => reference.label).join(', ')}\n </span>\n );\n}\n\n/** A link that opens the URL. */\nexport function UrlDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={value} target=\"_blank\" rel=\"noreferrer\">\n {value.replace(/^https?:\\/\\//, '')}\n </a>\n );\n}\n\n/** A link that writes an email. */\nexport function EmailDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`mailto:${value}`}>\n {value}\n </a>\n );\n}\n\n/** A link that calls the phone number. */\nexport function TelDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value.trim() === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`tel:${value.replace(/[^\\d+]/g, '')}`}>\n {value}\n </a>\n );\n}\n\n/** A duration in seconds, with its units: `1 h 5 min`, to the precision of its field. */\nexport function DurationDisplay({ value, field }: DisplayProps) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return <EmptyValue />;\n }\n const precision = field?.settings?.precision === 'minutes' ? 'minutes' : 'seconds';\n return <span className={styles.number}>{formatDuration(value, { precision })}</span>;\n}\n\n/** JSON on one line, shortened. */\nexport function JsonDisplay({ value }: DisplayProps) {\n if (value === null || value === undefined || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const json = JSON.stringify(value);\n return (\n <code className={styles.code} title={json.length > 80 ? json : undefined}>\n {json.length > 80 ? `${json.slice(0, 79)}…` : json}\n </code>\n );\n}\n\n/** Tags, as badges, with the labels of their options. */\nexport function TagsDisplay({ value, field }: DisplayProps) {\n const tags = Array.isArray(value) ? value.filter((tag) => typeof tag === 'string') : [];\n if (tags.length === 0) {\n return <EmptyValue />;\n }\n const options = field?.options ?? [];\n return (\n <span className={styles.tags}>\n {tags.map((tag) => (\n <Badge key={tag}>\n {options.find((option) => String(option.value) === tag)?.label ?? tag}\n </Badge>\n ))}\n </span>\n );\n}\n\n/** What a URL embeds: its thumbnail and title, linked to it. */\nexport function EmbedDisplay({ value }: DisplayProps) {\n if (\n value === null ||\n typeof value !== 'object' ||\n typeof (value as { url?: unknown }).url !== 'string'\n ) {\n return <EmptyValue />;\n }\n const { url, title, thumbnailUrl } = value as {\n url: string;\n title?: unknown;\n thumbnailUrl?: unknown;\n };\n return (\n <a className={`${styles.link} ${styles.media}`} href={url} target=\"_blank\" rel=\"noreferrer\">\n {typeof thumbnailUrl === 'string' ? (\n <img className={styles.thumbnail} src={thumbnailUrl} alt=\"\" />\n ) : null}\n <span className={styles.text}>\n {typeof title === 'string' ? title : url.replace(/^https?:\\/\\//, '')}\n </span>\n </a>\n );\n}\n\n/** A place: its address, or its coordinates. */\nexport function LocationDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const { lat, lng, address } = value as { lat?: unknown; lng?: unknown; address?: unknown };\n if (typeof address === 'string' && address !== '') {\n return <span className={styles.text}>{address}</span>;\n }\n if (typeof lat !== 'number' || typeof lng !== 'number') {\n return <EmptyValue />;\n }\n const format = (number: number) => intl.formatNumber(number, { maximumFractionDigits: 5 });\n return (\n <span className={styles.number}>\n {format(lat)}, {format(lng)}\n </span>\n );\n}\n\n/** A swatch, with the color's code. */\nexport function ColorDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <span className={styles.color}>\n <span className={styles.swatch} style={{ backgroundColor: value }} aria-hidden=\"true\" />\n {value}\n </span>\n );\n}\n\n/** A thumbnail and the name of a media item (or of the first one). */\nexport function MediaDisplay({ value }: DisplayProps) {\n const media: unknown = Array.isArray(value) ? value[0] : value;\n if (media === null || typeof media !== 'object') {\n return <EmptyValue />;\n }\n const { thumbnailUrl, url, name, filename } = media as Record<string, unknown>;\n const source =\n typeof thumbnailUrl === 'string' ? thumbnailUrl : typeof url === 'string' ? url : null;\n const label = typeof name === 'string' ? name : typeof filename === 'string' ? filename : '';\n return (\n <span className={styles.media}>\n {source !== null ? <img className={styles.thumbnail} src={source} alt=\"\" /> : null}\n {label !== '' ? <span className={styles.text}>{label}</span> : null}\n </span>\n );\n}\n\n/**\n * The built-in displays, by name. A column's display is its `display`, its field's `display`, or\n * its field's type: field types are display names. Values without a known display are shown as\n * text.\n */\nexport const builtInDisplays: Readonly<Record<string, DisplayEntry>> = {\n text: TextDisplay,\n textarea: TextDisplay,\n slug: TextDisplay,\n richtext: RichTextDisplay,\n number: NumberDisplay,\n boolean: BooleanDisplay,\n date: DateDisplay,\n datetime: DateTimeDisplay,\n time: TimeDisplay,\n select: SelectDisplay,\n relation: RelationDisplay,\n url: UrlDisplay,\n email: EmailDisplay,\n color: ColorDisplay,\n media: MediaDisplay,\n tel: TelDisplay,\n range: NumberDisplay,\n duration: DurationDisplay,\n json: JsonDisplay,\n tags: TagsDisplay,\n embed: EmbedDisplay,\n location: LocationDisplay,\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"displays.js","names":["Check","Minus","toReferences","formatDuration","Badge","Icon","Tone","usePanneauIntl","messages","DisplayEntry","DisplayProps","findOption","getFieldOptions","toText","styles","EmptyValue","$","_c","t0","Symbol","for","empty","isEmpty","value","undefined","Array","isArray","length","TextDisplay","field","intl","t1","locale","text","t2","settings","secret","formatMessage","secretValue","t3","RichTextDisplay","replace","trim","NumberDisplay","number","Number","NaN","isNaN","formatNumber","BooleanDisplay","checked","boolean","true","false","yes","no","t4","t5","DATE_ONLY","TIME_ONLY","parseDate","Date","day","exec","date","getTime","DateDisplay","bb0","String","formatDate","dateStyle","DateTimeDisplay","timeStyle","TimeDisplay","match","formatTime","SelectDisplay","options","values","badges","map","entry","option","tone","label","RelationDisplay","references","_temp","join","reference","UrlDisplay","link","EmailDisplay","TelDisplay","DurationDisplay","precision","JsonDisplay","json","JSON","stringify","code","slice","TagsDisplay","tags","filter","_temp2","tag_0","tag","find","EmbedDisplay","url","title","thumbnailUrl","thumbnail","media","LocationDisplay","lat","lng","address","maximumFractionDigits","format","ColorDisplay","swatch","backgroundColor","color","MediaDisplay","name","filename","Record","source","builtInDisplays","Readonly","textarea","slug","richtext","datetime","time","select","relation","email","tel","range","duration","embed","location","_c","styles"],"sources":["../../src/displays/displays.tsx"],"sourcesContent":["import { Check, Minus } from 'lucide-react';\n\nimport { toReferences } from '@panneau/fields';\nimport { formatDuration } from '@panneau/fields/duration';\nimport { Badge, Icon, type Tone, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport type { DisplayEntry, DisplayProps } from '../types';\nimport { findOption, getFieldOptions, toText } from '../values';\nimport styles from './Displays.module.css';\n\n/** What a cell shows without a value. Hidden from assistive technologies, which skip the cell. */\nexport function EmptyValue() {\n return (\n <span className={styles.empty} aria-hidden=\"true\">\n —\n </span>\n );\n}\n\nfunction isEmpty(value: unknown): boolean {\n return (\n value === null ||\n value === undefined ||\n value === '' ||\n (Array.isArray(value) && value.length === 0)\n );\n}\n\n/**\n * Text, on two lines at most. The default display. The value of a `secret` text field\n * (`settings.secret`) shows as dots, never in clear.\n */\nexport function TextDisplay({ value, field }: DisplayProps) {\n const intl = usePanneauIntl();\n const text = toText(value, intl.locale);\n if (text === '') {\n return <EmptyValue />;\n }\n if (field?.settings?.secret === true) {\n return (\n <span role=\"img\" aria-label={intl.formatMessage(messages.secretValue)}>\n ••••••••\n </span>\n );\n }\n return <span className={styles.text}>{text}</span>;\n}\n\n/** HTML as plain text. */\nexport function RichTextDisplay({ value }: DisplayProps) {\n const text =\n typeof value === 'string'\n ? value\n .replace(/<[^>]*>/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim()\n : '';\n return text === '' ? <EmptyValue /> : <span className={styles.text}>{text}</span>;\n}\n\n/** A number, in the format of the locale. */\nexport function NumberDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const number =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : NaN;\n if (Number.isNaN(number) || isEmpty(value)) {\n return <EmptyValue />;\n }\n return <span className={styles.number}>{intl.formatNumber(number)}</span>;\n}\n\n/** Yes or no, as an icon with its label. */\nexport function BooleanDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || value === undefined) {\n return <EmptyValue />;\n }\n const checked = value === true || value === 1 || value === 'true' || value === '1';\n return (\n <span className={`${styles.boolean} ${checked ? styles.true : styles.false}`}>\n <Icon\n icon={checked ? Check : Minus}\n label={intl.formatMessage(checked ? messages.yes : messages.no)}\n />\n </span>\n );\n}\n\nconst DATE_ONLY = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst TIME_ONLY = /^(\\d{2}):(\\d{2})(?::(\\d{2}))?$/;\n\n/** A date (`2026-10-15`) as a local date, so that it doesn't move with the time zone. */\nfunction parseDate(value: unknown): Date | null {\n if (typeof value !== 'string' || value === '') {\n return null;\n }\n const day = DATE_ONLY.exec(value);\n const date =\n day !== null\n ? new Date(Number(day[1]), Number(day[2]) - 1, Number(day[3]))\n : new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n}\n\n/** A date, in the format of the locale. */\nexport function DateDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return <time dateTime={String(value)}>{intl.formatDate(date, { dateStyle: 'medium' })}</time>;\n}\n\n/** A date and a time, in the format and the time zone of the user. */\nexport function DateTimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const date = parseDate(value);\n if (date === null) {\n return <EmptyValue />;\n }\n return (\n <time dateTime={String(value)}>\n {intl.formatDate(date, { dateStyle: 'medium', timeStyle: 'short' })}\n </time>\n );\n}\n\n/** A time of day (`14:30`), in the format of the locale. */\nexport function TimeDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n const match = typeof value === 'string' ? TIME_ONLY.exec(value) : null;\n if (match === null) {\n return <EmptyValue />;\n }\n const date = new Date(2000, 0, 1, Number(match[1]), Number(match[2]), Number(match[3] ?? 0));\n return <time dateTime={String(value)}>{intl.formatTime(date, { timeStyle: 'short' })}</time>;\n}\n\n/** The labels of the selected options, as badges. */\nexport function SelectDisplay({ value, field }: DisplayProps) {\n const options = getFieldOptions(field);\n const values: unknown[] = Array.isArray(value) ? value : isEmpty(value) ? [] : [value];\n if (values.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.badges}>\n {values.map((entry) => {\n const option = findOption(options, entry);\n return (\n <Badge key={String(entry)} tone={(option?.tone ?? 'neutral') as Tone}>\n {option?.label ?? String(entry)}\n </Badge>\n );\n })}\n </span>\n );\n}\n\n/** The labels of related items. */\nexport function RelationDisplay({ value }: DisplayProps) {\n const references = toReferences(value);\n if (references.length === 0) {\n return <EmptyValue />;\n }\n return (\n <span className={styles.text}>\n {references.map((reference) => reference.label).join(', ')}\n </span>\n );\n}\n\n/** A link that opens the URL. */\nexport function UrlDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={value} target=\"_blank\" rel=\"noreferrer\">\n {value.replace(/^https?:\\/\\//, '')}\n </a>\n );\n}\n\n/** A link that writes an email. */\nexport function EmailDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`mailto:${value}`}>\n {value}\n </a>\n );\n}\n\n/** A link that calls the phone number. */\nexport function TelDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value.trim() === '') {\n return <EmptyValue />;\n }\n return (\n <a className={styles.link} href={`tel:${value.replace(/[^\\d+]/g, '')}`}>\n {value}\n </a>\n );\n}\n\n/** A duration in seconds, with its units: `1 h 5 min`, to the precision of its field. */\nexport function DurationDisplay({ value, field }: DisplayProps) {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return <EmptyValue />;\n }\n const precision = field?.settings?.precision === 'minutes' ? 'minutes' : 'seconds';\n return <span className={styles.number}>{formatDuration(value, { precision })}</span>;\n}\n\n/** JSON on one line, shortened. */\nexport function JsonDisplay({ value }: DisplayProps) {\n if (value === null || value === undefined || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const json = JSON.stringify(value);\n return (\n <code className={styles.code} title={json.length > 80 ? json : undefined}>\n {json.length > 80 ? `${json.slice(0, 79)}…` : json}\n </code>\n );\n}\n\n/** Tags, as badges, with the labels of their options. */\nexport function TagsDisplay({ value, field }: DisplayProps) {\n const tags = Array.isArray(value) ? value.filter((tag) => typeof tag === 'string') : [];\n if (tags.length === 0) {\n return <EmptyValue />;\n }\n const options = field?.options ?? [];\n return (\n <span className={styles.tags}>\n {tags.map((tag) => (\n <Badge key={tag}>\n {options.find((option) => String(option.value) === tag)?.label ?? tag}\n </Badge>\n ))}\n </span>\n );\n}\n\n/** What a URL embeds: its thumbnail and title, linked to it. */\nexport function EmbedDisplay({ value }: DisplayProps) {\n if (\n value === null ||\n typeof value !== 'object' ||\n typeof (value as { url?: unknown }).url !== 'string'\n ) {\n return <EmptyValue />;\n }\n const { url, title, thumbnailUrl } = value as {\n url: string;\n title?: unknown;\n thumbnailUrl?: unknown;\n };\n return (\n <a className={`${styles.link} ${styles.media}`} href={url} target=\"_blank\" rel=\"noreferrer\">\n {typeof thumbnailUrl === 'string' ? (\n <img className={styles.thumbnail} src={thumbnailUrl} alt=\"\" />\n ) : null}\n <span className={styles.text}>\n {typeof title === 'string' ? title : url.replace(/^https?:\\/\\//, '')}\n </span>\n </a>\n );\n}\n\n/** A place: its address, or its coordinates. */\nexport function LocationDisplay({ value }: DisplayProps) {\n const intl = usePanneauIntl();\n if (value === null || typeof value !== 'object') {\n return <EmptyValue />;\n }\n const { lat, lng, address } = value as { lat?: unknown; lng?: unknown; address?: unknown };\n if (typeof address === 'string' && address !== '') {\n return <span className={styles.text}>{address}</span>;\n }\n if (typeof lat !== 'number' || typeof lng !== 'number') {\n return <EmptyValue />;\n }\n const format = (number: number) => intl.formatNumber(number, { maximumFractionDigits: 5 });\n return (\n <span className={styles.number}>\n {format(lat)}, {format(lng)}\n </span>\n );\n}\n\n/** A swatch, with the color's code. */\nexport function ColorDisplay({ value }: DisplayProps) {\n if (typeof value !== 'string' || value === '') {\n return <EmptyValue />;\n }\n return (\n <span className={styles.color}>\n <span className={styles.swatch} style={{ backgroundColor: value }} aria-hidden=\"true\" />\n {value}\n </span>\n );\n}\n\n/** A thumbnail and the name of a media item (or of the first one). */\nexport function MediaDisplay({ value }: DisplayProps) {\n const media: unknown = Array.isArray(value) ? value[0] : value;\n if (media === null || typeof media !== 'object') {\n return <EmptyValue />;\n }\n const { thumbnailUrl, url, name, filename } = media as Record<string, unknown>;\n const source =\n typeof thumbnailUrl === 'string' ? thumbnailUrl : typeof url === 'string' ? url : null;\n const label = typeof name === 'string' ? name : typeof filename === 'string' ? filename : '';\n return (\n <span className={styles.media}>\n {source !== null ? <img className={styles.thumbnail} src={source} alt=\"\" /> : null}\n {label !== '' ? <span className={styles.text}>{label}</span> : null}\n </span>\n );\n}\n\n/**\n * The built-in displays, by name. A column's display is its `display`, its field's `display`, or\n * its field's type: field types are display names. Values without a known display are shown as\n * text.\n */\nexport const builtInDisplays: Readonly<Record<string, DisplayEntry>> = {\n text: TextDisplay,\n textarea: TextDisplay,\n slug: TextDisplay,\n richtext: RichTextDisplay,\n number: NumberDisplay,\n boolean: BooleanDisplay,\n date: DateDisplay,\n datetime: DateTimeDisplay,\n time: TimeDisplay,\n select: SelectDisplay,\n relation: RelationDisplay,\n url: UrlDisplay,\n email: EmailDisplay,\n color: ColorDisplay,\n media: MediaDisplay,\n tel: TelDisplay,\n range: NumberDisplay,\n duration: DurationDisplay,\n json: JsonDisplay,\n tags: TagsDisplay,\n embed: EmbedDisplay,\n location: LocationDisplay,\n};\n"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export { ListView, type ListViewProps } from './ListView.js';
|
|
|
12
12
|
export { listsPlugin } from './plugin.js';
|
|
13
13
|
export { type LocalQueryOptions, type LocalQueryResult, applyListQuery } from './query.js';
|
|
14
14
|
export { countSelected, getPageSelection, isItemSelected } from './selection.js';
|
|
15
|
-
export { Pagination, type PaginationProps } from './toolbar/Pagination.js';
|
|
15
|
+
export { CursorPagination, type CursorPaginationProps, Pagination, type PaginationProps, getPagingProps, } from './toolbar/Pagination.js';
|
|
16
16
|
export { SearchField, type SearchFieldProps } from './toolbar/SearchField.js';
|
|
17
17
|
export type { DisplayEntry, DisplayProps, FilterControlProps, FilterEntry, ListActionEvent, ListActionHandler, ListActionPreview, ListActionPreviewer, ListColumn, ListItem, ListLayoutEntry, ListLayoutProps, } from './types.js';
|
|
18
18
|
export { useListState } from './useListState.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACH,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnG,OAAO,EACH,aAAa,EACb,KAAK,kBAAkB,EACvB,KAAK,cAAc,GACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EACH,cAAc,EACd,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,EACV,eAAe,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,UAAU,EACV,eAAe,EACf,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,cAAc,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EACH,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,UAAU,EACV,KAAK,eAAe,EACpB,cAAc,GACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,YAAY,EACR,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,GAClB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,11 +9,11 @@ import { TableLayout } from "./layouts/TableLayout.js";
|
|
|
9
9
|
import { builtInLayouts } from "./layouts/builtIn.js";
|
|
10
10
|
import { ItemDetails } from "./ItemDetails.js";
|
|
11
11
|
import { countSelected, getPageSelection, isItemSelected } from "./selection.js";
|
|
12
|
-
import { Pagination } from "./toolbar/Pagination.js";
|
|
12
|
+
import { CursorPagination, Pagination, getPagingProps } from "./toolbar/Pagination.js";
|
|
13
13
|
import { SearchField } from "./toolbar/SearchField.js";
|
|
14
14
|
import { useListState } from "./useListState.js";
|
|
15
15
|
import { ListView } from "./ListView.js";
|
|
16
16
|
import { applyListQuery } from "./query.js";
|
|
17
17
|
import { List } from "./List.js";
|
|
18
18
|
import { listsPlugin } from "./plugin.js";
|
|
19
|
-
export { BooleanDisplay, CardsLayout, ColorDisplay, ConfirmDialog, DateDisplay, DateFilter, DateRangeFilter, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, ItemDetails, JsonDisplay, List, ListView, LocationDisplay, MediaDisplay, NumberDisplay, Pagination, RelationDisplay, RelationFilter, RichTextDisplay, SearchField, SelectDisplay, SelectFilter, TableLayout, TagsDisplay, TelDisplay, TextDisplay, TextFilter, TimeDisplay, ToggleFilter, UrlDisplay, applyListQuery, builtInDisplays, builtInFilters, builtInLayouts, countSelected, getActionHref, getActionIcon, getLocalizedValue, getPageSelection, groupListActions, isAllowedOn, isItemSelected, listsPlugin, toText, useListState };
|
|
19
|
+
export { BooleanDisplay, CardsLayout, ColorDisplay, ConfirmDialog, CursorPagination, DateDisplay, DateFilter, DateRangeFilter, DateTimeDisplay, DurationDisplay, EmailDisplay, EmbedDisplay, EmptyValue, ItemDetails, JsonDisplay, List, ListView, LocationDisplay, MediaDisplay, NumberDisplay, Pagination, RelationDisplay, RelationFilter, RichTextDisplay, SearchField, SelectDisplay, SelectFilter, TableLayout, TagsDisplay, TelDisplay, TextDisplay, TextFilter, TimeDisplay, ToggleFilter, UrlDisplay, applyListQuery, builtInDisplays, builtInFilters, builtInLayouts, countSelected, getActionHref, getActionIcon, getLocalizedValue, getPageSelection, getPagingProps, groupListActions, isAllowedOn, isItemSelected, listsPlugin, toText, useListState };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ListResponse } from '@panneau/protocol';
|
|
1
2
|
export interface PaginationProps {
|
|
2
3
|
page: number;
|
|
3
4
|
perPage: number;
|
|
@@ -10,4 +11,36 @@ export interface PaginationProps {
|
|
|
10
11
|
}
|
|
11
12
|
/** The range of items shown, the page, and buttons to the previous and next pages. */
|
|
12
13
|
export declare function Pagination({ page, perPage, total, onPageChange, perPageOptions, onPerPageChange, }: PaginationProps): import("react").JSX.Element;
|
|
14
|
+
export interface CursorPaginationProps {
|
|
15
|
+
perPage: number;
|
|
16
|
+
/** Whether there is a page before: the list isn't on its first page. */
|
|
17
|
+
hasPrevious: boolean;
|
|
18
|
+
/** Whether there is a page after: the page has a `nextCursor`. */
|
|
19
|
+
hasNext: boolean;
|
|
20
|
+
onPrevious: () => void;
|
|
21
|
+
onNext: () => void;
|
|
22
|
+
/** Page sizes to choose from. Without them, the page size can't be changed. */
|
|
23
|
+
perPageOptions?: readonly number[] | undefined;
|
|
24
|
+
onPerPageChange?: (perPage: number) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Buttons to the previous and next pages of a list paged with cursors, which has no page numbers
|
|
28
|
+
* and no total (decision 0039).
|
|
29
|
+
*/
|
|
30
|
+
export declare function CursorPagination({ perPage, hasPrevious, hasNext, onPrevious, onNext, perPageOptions, onPerPageChange, }: CursorPaginationProps): import("react").JSX.Element;
|
|
31
|
+
/**
|
|
32
|
+
* The props of a `ListView` that page it, from the `meta` of a page of the list: `total` for
|
|
33
|
+
* numbered pages, `cursors` for a list paged with cursors.
|
|
34
|
+
*
|
|
35
|
+
* ```tsx
|
|
36
|
+
* <ListView {...getPagingProps(data?.meta)} items={data?.data} … />
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function getPagingProps(meta: ListResponse['meta'] | undefined): {
|
|
40
|
+
total?: number;
|
|
41
|
+
cursors?: {
|
|
42
|
+
next: string | null;
|
|
43
|
+
previous?: string | null;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
13
46
|
//# sourceMappingURL=Pagination.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/toolbar/Pagination.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../src/toolbar/Pagination.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOtD,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,+EAA+E;IAC/E,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,EACvB,IAAI,EACJ,OAAO,EACP,KAAK,EACL,YAAY,EACZ,cAAmB,EACnB,eAAe,GAClB,EAAE,eAAe,+BAyCjB;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,WAAW,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAC7B,OAAO,EACP,WAAW,EACX,OAAO,EACP,UAAU,EACV,MAAM,EACN,cAAmB,EACnB,eAAe,GAClB,EAAE,qBAAqB,+BAmCvB;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;CAC/D,CAaA"}
|
|
@@ -4,6 +4,7 @@ import { c } from "react/compiler-runtime";
|
|
|
4
4
|
import { IconButton, Select, usePanneauIntl } from "@panneau/ui";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
7
|
+
import { isCursorPage } from "@panneau/protocol/runtime";
|
|
7
8
|
//#region src/toolbar/Pagination.tsx
|
|
8
9
|
/** The range of items shown, the page, and buttons to the previous and next pages. */
|
|
9
10
|
function Pagination(t0) {
|
|
@@ -167,7 +168,135 @@ function _temp2(size) {
|
|
|
167
168
|
function _temp(a, b) {
|
|
168
169
|
return a - b;
|
|
169
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Buttons to the previous and next pages of a list paged with cursors, which has no page numbers
|
|
173
|
+
* and no total (decision 0039).
|
|
174
|
+
*/
|
|
175
|
+
function CursorPagination(t0) {
|
|
176
|
+
const $ = c(25);
|
|
177
|
+
const { perPage, hasPrevious, hasNext, onPrevious, onNext, perPageOptions: t1, onPerPageChange } = t0;
|
|
178
|
+
const perPageOptions = t1 === void 0 ? [] : t1;
|
|
179
|
+
const intl = usePanneauIntl();
|
|
180
|
+
const sizes = [.../* @__PURE__ */ new Set([...perPageOptions, perPage])].sort(_temp3);
|
|
181
|
+
let t2;
|
|
182
|
+
if ($[0] !== intl) {
|
|
183
|
+
t2 = intl.formatMessage(messages.pagination);
|
|
184
|
+
$[0] = intl;
|
|
185
|
+
$[1] = t2;
|
|
186
|
+
} else t2 = $[1];
|
|
187
|
+
const t3 = Toolbar_module_default;
|
|
188
|
+
let t4;
|
|
189
|
+
if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
|
|
190
|
+
t4 = /* @__PURE__ */ jsx("span", {});
|
|
191
|
+
$[2] = t4;
|
|
192
|
+
} else t4 = $[2];
|
|
193
|
+
const t5 = Toolbar_module_default;
|
|
194
|
+
const t6 = perPageOptions.length > 0 && onPerPageChange !== void 0 ? /* @__PURE__ */ jsx(Select, {
|
|
195
|
+
"aria-label": intl.formatMessage(messages.perPage),
|
|
196
|
+
options: sizes.map(_temp4),
|
|
197
|
+
value: perPage,
|
|
198
|
+
onChange: (value) => {
|
|
199
|
+
if (typeof value === "number") onPerPageChange(value);
|
|
200
|
+
},
|
|
201
|
+
className: Toolbar_module_default.perPage
|
|
202
|
+
}) : null;
|
|
203
|
+
let t7;
|
|
204
|
+
if ($[3] !== intl) {
|
|
205
|
+
t7 = intl.formatMessage(messages.previousPage);
|
|
206
|
+
$[3] = intl;
|
|
207
|
+
$[4] = t7;
|
|
208
|
+
} else t7 = $[4];
|
|
209
|
+
const t8 = !hasPrevious;
|
|
210
|
+
let t9;
|
|
211
|
+
if ($[5] !== onPrevious || $[6] !== t7 || $[7] !== t8) {
|
|
212
|
+
t9 = /* @__PURE__ */ jsx(IconButton, {
|
|
213
|
+
icon: ChevronLeft,
|
|
214
|
+
label: t7,
|
|
215
|
+
isDisabled: t8,
|
|
216
|
+
onPress: onPrevious
|
|
217
|
+
});
|
|
218
|
+
$[5] = onPrevious;
|
|
219
|
+
$[6] = t7;
|
|
220
|
+
$[7] = t8;
|
|
221
|
+
$[8] = t9;
|
|
222
|
+
} else t9 = $[8];
|
|
223
|
+
let t10;
|
|
224
|
+
if ($[9] !== intl) {
|
|
225
|
+
t10 = intl.formatMessage(messages.nextPage);
|
|
226
|
+
$[9] = intl;
|
|
227
|
+
$[10] = t10;
|
|
228
|
+
} else t10 = $[10];
|
|
229
|
+
const t11 = !hasNext;
|
|
230
|
+
let t12;
|
|
231
|
+
if ($[11] !== onNext || $[12] !== t10 || $[13] !== t11) {
|
|
232
|
+
t12 = /* @__PURE__ */ jsx(IconButton, {
|
|
233
|
+
icon: ChevronRight,
|
|
234
|
+
label: t10,
|
|
235
|
+
isDisabled: t11,
|
|
236
|
+
onPress: onNext
|
|
237
|
+
});
|
|
238
|
+
$[11] = onNext;
|
|
239
|
+
$[12] = t10;
|
|
240
|
+
$[13] = t11;
|
|
241
|
+
$[14] = t12;
|
|
242
|
+
} else t12 = $[14];
|
|
243
|
+
let t13;
|
|
244
|
+
if ($[15] !== t12 || $[16] !== t5.pages || $[17] !== t6 || $[18] !== t9) {
|
|
245
|
+
t13 = /* @__PURE__ */ jsxs("div", {
|
|
246
|
+
className: t5.pages,
|
|
247
|
+
children: [
|
|
248
|
+
t6,
|
|
249
|
+
t9,
|
|
250
|
+
t12
|
|
251
|
+
]
|
|
252
|
+
});
|
|
253
|
+
$[15] = t12;
|
|
254
|
+
$[16] = t5.pages;
|
|
255
|
+
$[17] = t6;
|
|
256
|
+
$[18] = t9;
|
|
257
|
+
$[19] = t13;
|
|
258
|
+
} else t13 = $[19];
|
|
259
|
+
let t14;
|
|
260
|
+
if ($[20] !== t13 || $[21] !== t2 || $[22] !== t3.pagination || $[23] !== t4) {
|
|
261
|
+
t14 = /* @__PURE__ */ jsxs("nav", {
|
|
262
|
+
"aria-label": t2,
|
|
263
|
+
className: t3.pagination,
|
|
264
|
+
children: [t4, t13]
|
|
265
|
+
});
|
|
266
|
+
$[20] = t13;
|
|
267
|
+
$[21] = t2;
|
|
268
|
+
$[22] = t3.pagination;
|
|
269
|
+
$[23] = t4;
|
|
270
|
+
$[24] = t14;
|
|
271
|
+
} else t14 = $[24];
|
|
272
|
+
return t14;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* The props of a `ListView` that page it, from the `meta` of a page of the list: `total` for
|
|
276
|
+
* numbered pages, `cursors` for a list paged with cursors.
|
|
277
|
+
*
|
|
278
|
+
* ```tsx
|
|
279
|
+
* <ListView {...getPagingProps(data?.meta)} items={data?.data} … />
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
function _temp4(size) {
|
|
283
|
+
return {
|
|
284
|
+
value: size,
|
|
285
|
+
label: String(size)
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
function _temp3(a, b) {
|
|
289
|
+
return a - b;
|
|
290
|
+
}
|
|
291
|
+
function getPagingProps(meta) {
|
|
292
|
+
if (meta === void 0) return {};
|
|
293
|
+
if (isCursorPage(meta)) return { cursors: {
|
|
294
|
+
next: meta.nextCursor,
|
|
295
|
+
...meta.previousCursor !== void 0 ? { previous: meta.previousCursor } : {}
|
|
296
|
+
} };
|
|
297
|
+
return { total: meta.total };
|
|
298
|
+
}
|
|
170
299
|
//#endregion
|
|
171
|
-
export { Pagination };
|
|
300
|
+
export { CursorPagination, Pagination, getPagingProps };
|
|
172
301
|
|
|
173
302
|
//# sourceMappingURL=Pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pagination.js","names":["ChevronLeft","ChevronRight","IconButton","Select","usePanneauIntl","messages","styles","PaginationProps","page","perPage","total","onPageChange","perPageOptions","onPerPageChange","Pagination","t0","$","_c","t1","undefined","intl","lastPage","Math","max","ceil","start","end","min","sizes","Set","sort","_temp","t2","formatMessage","pagination","t4","range","t5","t7","length","map","_temp2","value","t8","previousPage","t9","t10","t11","t12","pageOf","t13","t14","nextPage","t15","t16","t17","t18","t6","pages","t19","t3","size","label","String","a","b","_c","styles"],"sources":["../../src/toolbar/Pagination.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport { IconButton, Select, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport styles from './Toolbar.module.css';\n\nexport interface PaginationProps {\n page: number;\n perPage: number;\n /** How many items match the query, on every page. */\n total: number;\n onPageChange: (page: number) => void;\n /** Page sizes to choose from. Without them, the page size can't be changed. */\n perPageOptions?: readonly number[] | undefined;\n onPerPageChange?: (perPage: number) => void;\n}\n\n/** The range of items shown, the page, and buttons to the previous and next pages. */\nexport function Pagination({\n page,\n perPage,\n total,\n onPageChange,\n perPageOptions = [],\n onPerPageChange,\n}: PaginationProps) {\n const intl = usePanneauIntl();\n const lastPage = Math.max(1, Math.ceil(total / perPage));\n const start = total === 0 ? 0 : (page - 1) * perPage + 1;\n const end = Math.min(total, page * perPage);\n const sizes = [...new Set([...perPageOptions, perPage])].sort((a, b) => a - b);\n return (\n <nav aria-label={intl.formatMessage(messages.pagination)} className={styles.pagination}>\n <span>{intl.formatMessage(messages.range, { start, end, total })}</span>\n <div className={styles.pages}>\n {perPageOptions.length > 0 && onPerPageChange !== undefined ? (\n <Select\n aria-label={intl.formatMessage(messages.perPage)}\n options={sizes.map((size) => ({ value: size, label: String(size) }))}\n value={perPage}\n onChange={(value) => {\n if (typeof value === 'number') {\n onPerPageChange(value);\n }\n }}\n className={styles.perPage}\n />\n ) : null}\n <IconButton\n icon={ChevronLeft}\n label={intl.formatMessage(messages.previousPage)}\n isDisabled={page <= 1}\n onPress={() => onPageChange(page - 1)}\n />\n <span aria-current=\"page\">\n {intl.formatMessage(messages.pageOf, { page, lastPage })}\n </span>\n <IconButton\n icon={ChevronRight}\n label={intl.formatMessage(messages.nextPage)}\n isDisabled={page >= lastPage}\n onPress={() => onPageChange(page + 1)}\n />\n </div>\n </nav>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Pagination.js","names":["ChevronLeft","ChevronRight","ListResponse","isCursorPage","IconButton","Select","usePanneauIntl","messages","styles","PaginationProps","page","perPage","total","onPageChange","perPageOptions","onPerPageChange","Pagination","t0","$","_c","t1","undefined","intl","lastPage","Math","max","ceil","start","end","min","sizes","Set","sort","_temp","t2","formatMessage","pagination","t4","range","t5","t7","length","map","_temp2","value","t8","previousPage","t9","t10","t11","t12","pageOf","t13","t14","nextPage","t15","t16","t17","t18","t6","pages","t19","t3","size","label","String","a","b","CursorPaginationProps","hasPrevious","hasNext","onPrevious","onNext","CursorPagination","_temp3","Symbol","for","_temp4","getPagingProps","meta","cursors","next","previous","nextCursor","previousCursor","_c","styles"],"sources":["../../src/toolbar/Pagination.tsx"],"sourcesContent":["import { ChevronLeft, ChevronRight } from 'lucide-react';\n\nimport type { ListResponse } from '@panneau/protocol';\nimport { isCursorPage } from '@panneau/protocol/runtime';\nimport { IconButton, Select, usePanneauIntl } from '@panneau/ui';\n\nimport { messages } from '../messages';\nimport styles from './Toolbar.module.css';\n\nexport interface PaginationProps {\n page: number;\n perPage: number;\n /** How many items match the query, on every page. */\n total: number;\n onPageChange: (page: number) => void;\n /** Page sizes to choose from. Without them, the page size can't be changed. */\n perPageOptions?: readonly number[] | undefined;\n onPerPageChange?: (perPage: number) => void;\n}\n\n/** The range of items shown, the page, and buttons to the previous and next pages. */\nexport function Pagination({\n page,\n perPage,\n total,\n onPageChange,\n perPageOptions = [],\n onPerPageChange,\n}: PaginationProps) {\n const intl = usePanneauIntl();\n const lastPage = Math.max(1, Math.ceil(total / perPage));\n const start = total === 0 ? 0 : (page - 1) * perPage + 1;\n const end = Math.min(total, page * perPage);\n const sizes = [...new Set([...perPageOptions, perPage])].sort((a, b) => a - b);\n return (\n <nav aria-label={intl.formatMessage(messages.pagination)} className={styles.pagination}>\n <span>{intl.formatMessage(messages.range, { start, end, total })}</span>\n <div className={styles.pages}>\n {perPageOptions.length > 0 && onPerPageChange !== undefined ? (\n <Select\n aria-label={intl.formatMessage(messages.perPage)}\n options={sizes.map((size) => ({ value: size, label: String(size) }))}\n value={perPage}\n onChange={(value) => {\n if (typeof value === 'number') {\n onPerPageChange(value);\n }\n }}\n className={styles.perPage}\n />\n ) : null}\n <IconButton\n icon={ChevronLeft}\n label={intl.formatMessage(messages.previousPage)}\n isDisabled={page <= 1}\n onPress={() => onPageChange(page - 1)}\n />\n <span aria-current=\"page\">\n {intl.formatMessage(messages.pageOf, { page, lastPage })}\n </span>\n <IconButton\n icon={ChevronRight}\n label={intl.formatMessage(messages.nextPage)}\n isDisabled={page >= lastPage}\n onPress={() => onPageChange(page + 1)}\n />\n </div>\n </nav>\n );\n}\n\nexport interface CursorPaginationProps {\n perPage: number;\n /** Whether there is a page before: the list isn't on its first page. */\n hasPrevious: boolean;\n /** Whether there is a page after: the page has a `nextCursor`. */\n hasNext: boolean;\n onPrevious: () => void;\n onNext: () => void;\n /** Page sizes to choose from. Without them, the page size can't be changed. */\n perPageOptions?: readonly number[] | undefined;\n onPerPageChange?: (perPage: number) => void;\n}\n\n/**\n * Buttons to the previous and next pages of a list paged with cursors, which has no page numbers\n * and no total (decision 0039).\n */\nexport function CursorPagination({\n perPage,\n hasPrevious,\n hasNext,\n onPrevious,\n onNext,\n perPageOptions = [],\n onPerPageChange,\n}: CursorPaginationProps) {\n const intl = usePanneauIntl();\n const sizes = [...new Set([...perPageOptions, perPage])].sort((a, b) => a - b);\n return (\n <nav aria-label={intl.formatMessage(messages.pagination)} className={styles.pagination}>\n <span />\n <div className={styles.pages}>\n {perPageOptions.length > 0 && onPerPageChange !== undefined ? (\n <Select\n aria-label={intl.formatMessage(messages.perPage)}\n options={sizes.map((size) => ({ value: size, label: String(size) }))}\n value={perPage}\n onChange={(value) => {\n if (typeof value === 'number') {\n onPerPageChange(value);\n }\n }}\n className={styles.perPage}\n />\n ) : null}\n <IconButton\n icon={ChevronLeft}\n label={intl.formatMessage(messages.previousPage)}\n isDisabled={!hasPrevious}\n onPress={onPrevious}\n />\n <IconButton\n icon={ChevronRight}\n label={intl.formatMessage(messages.nextPage)}\n isDisabled={!hasNext}\n onPress={onNext}\n />\n </div>\n </nav>\n );\n}\n\n/**\n * The props of a `ListView` that page it, from the `meta` of a page of the list: `total` for\n * numbered pages, `cursors` for a list paged with cursors.\n *\n * ```tsx\n * <ListView {...getPagingProps(data?.meta)} items={data?.data} … />\n * ```\n */\nexport function getPagingProps(meta: ListResponse['meta'] | undefined): {\n total?: number;\n cursors?: { next: string | null; previous?: string | null };\n} {\n if (meta === undefined) {\n return {};\n }\n if (isCursorPage(meta)) {\n return {\n cursors: {\n next: meta.nextCursor,\n ...(meta.previousCursor !== undefined ? { previous: meta.previousCursor } : {}),\n },\n };\n }\n return { total: meta.total };\n}\n"],"mappings":"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"}
|
package/dist/values.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export declare function getColumnValue(item: ListItem, column: ListColumn, local
|
|
|
16
16
|
export declare function toText(value: unknown, locale: string): string;
|
|
17
17
|
/** The options of a field, or none. */
|
|
18
18
|
export declare function getFieldOptions(field: Field | null | undefined): readonly Option[];
|
|
19
|
+
/** The option of a value, matched as a string (values from the URL are strings). */
|
|
20
|
+
export declare function findOption(options: readonly Option[], value: unknown): Option | undefined;
|
|
19
21
|
/** The label of an option value, matched as a string (values from the URL are strings). */
|
|
20
22
|
export declare function getOptionLabel(options: readonly Option[], value: unknown): string | null;
|
|
21
23
|
//# sourceMappingURL=values.d.ts.map
|
package/dist/values.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAczE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAElF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAczE;AAED,oDAAoD;AACpD,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED,0FAA0F;AAC1F,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAuB7D;AAED,uCAAuC;AACvC,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAElF;AAED,oFAAoF;AACpF,wBAAgB,UAAU,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEzF;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAExF"}
|
package/dist/values.js
CHANGED
|
@@ -42,11 +42,15 @@ function toText(value, locale) {
|
|
|
42
42
|
function getFieldOptions(field) {
|
|
43
43
|
return field?.options ?? [];
|
|
44
44
|
}
|
|
45
|
+
/** The option of a value, matched as a string (values from the URL are strings). */
|
|
46
|
+
function findOption(options, value) {
|
|
47
|
+
return options.find((candidate) => String(candidate.value) === String(value));
|
|
48
|
+
}
|
|
45
49
|
/** The label of an option value, matched as a string (values from the URL are strings). */
|
|
46
50
|
function getOptionLabel(options, value) {
|
|
47
|
-
return options
|
|
51
|
+
return findOption(options, value)?.label ?? null;
|
|
48
52
|
}
|
|
49
53
|
//#endregion
|
|
50
|
-
export { getColumnValue, getFieldOptions, getLocalizedValue, getOptionLabel, isLocalized, toText };
|
|
54
|
+
export { findOption, getColumnValue, getFieldOptions, getLocalizedValue, getOptionLabel, isLocalized, toText };
|
|
51
55
|
|
|
52
56
|
//# sourceMappingURL=values.js.map
|
package/dist/values.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"values.js","names":["Field","Option","ListColumn","ListItem","isRecord","value","Record","Array","isArray","getLocalizedValue","locale","language","split","filled","candidate","undefined","Object","values","find","isLocalized","field","localized","getColumnValue","item","column","name","id","toText","String","map","entry","filter","text","join","label","getFieldOptions","options","
|
|
1
|
+
{"version":3,"file":"values.js","names":["Field","Option","ListColumn","ListItem","isRecord","value","Record","Array","isArray","getLocalizedValue","locale","language","split","filled","candidate","undefined","Object","values","find","isLocalized","field","localized","getColumnValue","item","column","name","id","toText","String","map","entry","filter","text","join","label","getFieldOptions","options","findOption","getOptionLabel"],"sources":["../src/values.ts"],"sourcesContent":["import type { Field, Option } from '@panneau/protocol';\n\nimport type { ListColumn, ListItem } from './types';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\n/**\n * The value of a localized field in a locale: the locale (`fr-CA`), its language (`fr`), then the\n * first filled locale. Other values are returned as they are.\n */\nexport function getLocalizedValue(value: unknown, locale: string): unknown {\n if (!isRecord(value)) {\n return value;\n }\n const language = locale.split('-')[0] ?? locale;\n const filled = (candidate: unknown) =>\n candidate !== undefined && candidate !== null && candidate !== '';\n if (filled(value[locale])) {\n return value[locale];\n }\n if (filled(value[language])) {\n return value[language];\n }\n return Object.values(value).find(filled) ?? null;\n}\n\n/** Whether a field's values are keyed by locale. */\nexport function isLocalized(field: Field | null | undefined): boolean {\n return field?.localized === true;\n}\n\n/** The value of a column for an item: `item[id]`, in the locale for a localized field. */\nexport function getColumnValue(item: ListItem, column: ListColumn, locale: string): unknown {\n const value = item[column.field?.name ?? column.id];\n return isLocalized(column.field) ? getLocalizedValue(value, locale) : value;\n}\n\n/**\n * A value as plain text: strings and numbers as they are, references by their label, localized\n * values in the locale, lists joined with commas. For labels of items and for search.\n */\nexport function toText(value: unknown, locale: string): string {\n if (value === null || value === undefined) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return String(value);\n }\n if (Array.isArray(value)) {\n return value\n .map((entry) => toText(entry, locale))\n .filter((text) => text !== '')\n .join(', ');\n }\n if (isRecord(value)) {\n if (typeof value.label === 'string') {\n return value.label;\n }\n return toText(getLocalizedValue(value, locale), locale);\n }\n return '';\n}\n\n/** The options of a field, or none. */\nexport function getFieldOptions(field: Field | null | undefined): readonly Option[] {\n return field?.options ?? [];\n}\n\n/** The option of a value, matched as a string (values from the URL are strings). */\nexport function findOption(options: readonly Option[], value: unknown): Option | undefined {\n return options.find((candidate) => String(candidate.value) === String(value));\n}\n\n/** The label of an option value, matched as a string (values from the URL are strings). */\nexport function getOptionLabel(options: readonly Option[], value: unknown): string | null {\n return findOption(options, value)?.label ?? null;\n}\n"],"mappings":";AAIA,SAASI,SAASC,OAAkD;CAChE,OAAOA,UAAU,QAAQ,OAAOA,UAAU,YAAY,CAACE,MAAMC,QAAQH,KAAK;AAC9E;;;;;AAMA,SAAgBI,kBAAkBJ,OAAgBK,QAAyB;CACvE,IAAI,CAACN,SAASC,KAAK,GACf,OAAOA;CAEX,MAAMM,WAAWD,OAAOE,MAAM,GAAG,CAAC,CAAC,MAAMF;CACzC,MAAMG,UAAUC,cACZA,cAAcC,KAAAA,KAAaD,cAAc,QAAQA,cAAc;CACnE,IAAID,OAAOR,MAAMK,OAAO,GACpB,OAAOL,MAAMK;CAEjB,IAAIG,OAAOR,MAAMM,SAAS,GACtB,OAAON,MAAMM;CAEjB,OAAOK,OAAOC,OAAOZ,KAAK,CAAC,CAACa,KAAKL,MAAM,KAAK;AAChD;;AAGA,SAAgBM,YAAYC,OAA0C;CAClE,OAAOA,OAAOC,cAAc;AAChC;;AAGA,SAAgBC,eAAeC,MAAgBC,QAAoBd,QAAyB;CACxF,MAAML,QAAQkB,KAAKC,OAAOJ,OAAOK,QAAQD,OAAOE;CAChD,OAAOP,YAAYK,OAAOJ,KAAK,IAAIX,kBAAkBJ,OAAOK,MAAM,IAAIL;AAC1E;;;;;AAMA,SAAgBsB,OAAOtB,OAAgBK,QAAwB;CAC3D,IAAIL,UAAU,QAAQA,UAAUU,KAAAA,GAC5B,OAAO;CAEX,IAAI,OAAOV,UAAU,UACjB,OAAOA;CAEX,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,WAC9C,OAAOuB,OAAOvB,KAAK;CAEvB,IAAIE,MAAMC,QAAQH,KAAK,GACnB,OAAOA,MACFwB,KAAKC,UAAUH,OAAOG,OAAOpB,MAAM,CAAC,CAAC,CACrCqB,QAAQC,SAASA,SAAS,EAAE,CAAC,CAC7BC,KAAK,IAAI;CAElB,IAAI7B,SAASC,KAAK,GAAG;EACjB,IAAI,OAAOA,MAAM6B,UAAU,UACvB,OAAO7B,MAAM6B;EAEjB,OAAOP,OAAOlB,kBAAkBJ,OAAOK,MAAM,GAAGA,MAAM;CAC1D;CACA,OAAO;AACX;;AAGA,SAAgByB,gBAAgBf,OAAoD;CAChF,OAAOA,OAAOgB,WAAW,CAAA;AAC7B;;AAGA,SAAgBC,WAAWD,SAA4B/B,OAAoC;CACvF,OAAO+B,QAAQlB,MAAMJ,cAAcc,OAAOd,UAAUT,KAAK,MAAMuB,OAAOvB,KAAK,CAAC;AAChF;;AAGA,SAAgBiC,eAAeF,SAA4B/B,OAA+B;CACtF,OAAOgC,WAAWD,SAAS/B,KAAK,CAAC,EAAE6B,SAAS;AAChD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@panneau/lists",
|
|
3
|
-
"version": "5.0.0-alpha.
|
|
3
|
+
"version": "5.0.0-alpha.9",
|
|
4
4
|
"description": "Lists of Panneau: columns with displays, table and cards layouts, sorting, filters, search, pagination, selection and actions, driven by the list state of @panneau/core.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,14 +37,14 @@
|
|
|
37
37
|
"react-intl": "^12.0.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@panneau/core": "5.0.0-alpha.
|
|
41
|
-
"@panneau/fields": "5.0.0-alpha.
|
|
42
|
-
"@panneau/intl": "5.0.0-alpha.
|
|
43
|
-
"@panneau/protocol": "5.0.0-alpha.
|
|
44
|
-
"@panneau/ui": "5.0.0-alpha.
|
|
40
|
+
"@panneau/core": "5.0.0-alpha.9",
|
|
41
|
+
"@panneau/fields": "5.0.0-alpha.9",
|
|
42
|
+
"@panneau/intl": "5.0.0-alpha.9",
|
|
43
|
+
"@panneau/protocol": "5.0.0-alpha.9",
|
|
44
|
+
"@panneau/ui": "5.0.0-alpha.9",
|
|
45
45
|
"lucide-react": "^1.57.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@panneau/data": "5.0.0-alpha.
|
|
48
|
+
"@panneau/data": "5.0.0-alpha.9"
|
|
49
49
|
}
|
|
50
50
|
}
|