@keenaioc/data-view 0.0.0-poc.1 → 0.2.0-alpha.11
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/CHANGELOG.md +138 -0
- package/DATA-PRIVACY.md +20 -0
- package/INTEGRATION.md +258 -0
- package/KNOWN-LIMITATIONS.md +63 -0
- package/LICENSE +41 -0
- package/README.md +73 -5
- package/dist/column-actions.d.ts +47 -0
- package/dist/column-actions.d.ts.map +1 -0
- package/dist/column-actions.js +92 -0
- package/dist/column-actions.js.map +1 -0
- package/dist/column-menu.d.ts +25 -0
- package/dist/column-menu.d.ts.map +1 -0
- package/dist/column-menu.js +64 -0
- package/dist/column-menu.js.map +1 -0
- package/dist/contracts.d.ts +33 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +84 -0
- package/dist/contracts.js.map +1 -0
- package/dist/data-view.d.ts +3 -0
- package/dist/data-view.d.ts.map +1 -0
- package/dist/data-view.js +883 -0
- package/dist/data-view.js.map +1 -0
- package/dist/engine.d.ts +35 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +315 -0
- package/dist/engine.js.map +1 -0
- package/dist/field-order.d.ts +8 -0
- package/dist/field-order.d.ts.map +1 -0
- package/dist/field-order.js +28 -0
- package/dist/field-order.js.map +1 -0
- package/dist/gantt-bar.d.ts +17 -0
- package/dist/gantt-bar.d.ts.map +1 -0
- package/dist/gantt-bar.js +142 -0
- package/dist/gantt-bar.js.map +1 -0
- package/dist/gantt-dependencies.d.ts +27 -0
- package/dist/gantt-dependencies.d.ts.map +1 -0
- package/dist/gantt-dependencies.js +218 -0
- package/dist/gantt-dependencies.js.map +1 -0
- package/dist/gantt-dependency-ui.d.ts +37 -0
- package/dist/gantt-dependency-ui.d.ts.map +1 -0
- package/dist/gantt-dependency-ui.js +79 -0
- package/dist/gantt-dependency-ui.js.map +1 -0
- package/dist/gantt-grid.d.ts +27 -0
- package/dist/gantt-grid.d.ts.map +1 -0
- package/dist/gantt-grid.js +72 -0
- package/dist/gantt-grid.js.map +1 -0
- package/dist/gantt-operations.d.ts +14 -0
- package/dist/gantt-operations.d.ts.map +1 -0
- package/dist/gantt-operations.js +103 -0
- package/dist/gantt-operations.js.map +1 -0
- package/dist/group-order.d.ts +8 -0
- package/dist/group-order.d.ts.map +1 -0
- package/dist/group-order.js +24 -0
- package/dist/group-order.js.map +1 -0
- package/dist/group-settings.d.ts +17 -0
- package/dist/group-settings.d.ts.map +1 -0
- package/dist/group-settings.js +44 -0
- package/dist/group-settings.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/operations.d.ts +11 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +117 -0
- package/dist/operations.js.map +1 -0
- package/dist/registry.d.ts +17 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +482 -0
- package/dist/registry.js.map +1 -0
- package/dist/remote-data.d.ts +19 -0
- package/dist/remote-data.d.ts.map +1 -0
- package/dist/remote-data.js +67 -0
- package/dist/remote-data.js.map +1 -0
- package/dist/row-move.d.ts +7 -0
- package/dist/row-move.d.ts.map +1 -0
- package/dist/row-move.js +27 -0
- package/dist/row-move.js.map +1 -0
- package/dist/schedule-view.d.ts +27 -0
- package/dist/schedule-view.d.ts.map +1 -0
- package/dist/schedule-view.js +122 -0
- package/dist/schedule-view.js.map +1 -0
- package/dist/schedule.d.ts +28 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +97 -0
- package/dist/schedule.js.map +1 -0
- package/dist/style.css +1028 -0
- package/dist/timeline.d.ts +25 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +58 -0
- package/dist/timeline.js.map +1 -0
- package/dist/toolbar.d.ts +10 -0
- package/dist/toolbar.d.ts.map +1 -0
- package/dist/toolbar.js +31 -0
- package/dist/toolbar.js.map +1 -0
- package/dist/types.d.ts +474 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +22 -0
- package/dist/types.js.map +1 -0
- package/dist/use-remote-data.d.ts +18 -0
- package/dist/use-remote-data.d.ts.map +1 -0
- package/dist/use-remote-data.js +12 -0
- package/dist/use-remote-data.js.map +1 -0
- package/dist/use-row-move.d.ts +12 -0
- package/dist/use-row-move.d.ts.map +1 -0
- package/dist/use-row-move.js +151 -0
- package/dist/use-row-move.js.map +1 -0
- package/dist/v2-panels.d.ts +37 -0
- package/dist/v2-panels.d.ts.map +1 -0
- package/dist/v2-panels.js +118 -0
- package/dist/v2-panels.js.map +1 -0
- package/dist/view-state.d.ts +30 -0
- package/dist/view-state.d.ts.map +1 -0
- package/dist/view-state.js +94 -0
- package/dist/view-state.js.map +1 -0
- package/dist/view-workspace.d.ts +3 -0
- package/dist/view-workspace.d.ts.map +1 -0
- package/dist/view-workspace.js +95 -0
- package/dist/view-workspace.js.map +1 -0
- package/dist/virtual-list.d.ts +12 -0
- package/dist/virtual-list.d.ts.map +1 -0
- package/dist/virtual-list.js +46 -0
- package/dist/virtual-list.js.map +1 -0
- package/package.json +19 -16
- package/index.d.ts +0 -2
- package/index.js +0 -5
- package/react.d.ts +0 -2
- package/react.js +0 -8
- package/style.css +0 -1
package/README.md
CHANGED
|
@@ -1,11 +1,79 @@
|
|
|
1
1
|
# @keenaioc/data-view
|
|
2
2
|
|
|
3
|
-
HomeYa
|
|
3
|
+
HomeYa 共用資料視圖引擎。以 既有工作台的既有表格成果為主要來源,集中管理欄位型別、表格操作、個人檢視與通用資料/權限介面。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
套件不包含資料庫、業務流程、報價公式、使用者帳號或專案資料。接入專案透過 `DataView` 的 callbacks 處理讀取、寫入、附件、權限與稽核。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
本文件版本:**`0.2.0-alpha.11`(公開 Alpha 測試版)**。新增欄位表頭操作選單與分組自訂順序;保留電腦/手機各自設定及既有欄位移動。程式、型別、建置及打包檢查已通過;修正後瀏覽器操作驗收尚未完成,接入時須重測。
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
既有基底:整合 T01~T19:工作台密度與 renderer、權限及狀態分離、資料列拖曳、並行寫入、手機獨立版面、排程空值、無分頁與遠端查詢契約。原先規劃的 alpha.6/alpha.7 合併為本版;alpha.6 未另行發布。
|
|
10
|
+
|
|
11
|
+
本版保留 Alpha 限制:自動測試與建置通過,完整桌機/手機操作驗收尚未完成。先在測試專案接入,再決定是否升級正式系統。
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
npm install --save-exact @keenaioc/data-view@0.2.0-alpha.11
|
|
11
15
|
```
|
|
16
|
+
|
|
17
|
+
必須固定精確版本;不要使用無版本安裝、`latest`、`next` 或範圍版本。
|
|
18
|
+
|
|
19
|
+
公開範圍及所有接入專案的資料隔離規則見 [資料保護說明](./DATA-PRIVACY.md)。
|
|
20
|
+
|
|
21
|
+
詳見 [接入說明](./INTEGRATION.md)、[已知限制](./KNOWN-LIMITATIONS.md) 與 [更新紀錄](./CHANGELOG.md)。
|
|
22
|
+
|
|
23
|
+
需要 React >=18.2 且 <20;已實測 React 19.2.6。套件是 ESM,並包含 TypeScript 定義;必須引用 CSS。Next.js/Sites 請在 client component 使用 DataView。
|
|
24
|
+
|
|
25
|
+
以下是可直接使用的唯讀接入;加入寫入 callback 後才開放編輯。
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
"use client";
|
|
29
|
+
import { DataView, DATA_VIEW_VERSION, type FieldDefinition } from "@keenaioc/data-view";
|
|
30
|
+
import "@keenaioc/data-view/style.css";
|
|
31
|
+
|
|
32
|
+
type Project = { id: string; name: string; hidden: boolean };
|
|
33
|
+
const fields: FieldDefinition<Project>[] = [
|
|
34
|
+
{ id: "name", label: "案件", type: "singleLineText", pinned: "left" },
|
|
35
|
+
{ id: "hidden", label: "完成隱藏", type: "checkbox" },
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
export function ProjectView({ rows }: { rows: Project[] }) {
|
|
39
|
+
return <>
|
|
40
|
+
<small>HomeYa 共用資料視圖 {DATA_VIEW_VERSION}</small>
|
|
41
|
+
<DataView fields={fields} rows={rows} getRowId={(row) => row.id}
|
|
42
|
+
initialView={{ filters: { conjunction: "and", rules: [
|
|
43
|
+
{ id: "open-only", fieldId: "hidden", operator: "isFalse" },
|
|
44
|
+
] } }} />
|
|
45
|
+
</>;
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
完成隱藏只是一般 checkbox 欄位;是否隱藏由檢視篩選決定,不刪除資料。新增欄位需要同時提供 `onFieldChange` 與 `permissions.canManageFields: true`。寫入後由 host 更新 `rows`/`fields`,否則畫面不會保存新值。
|
|
50
|
+
|
|
51
|
+
## V2 相容擴充
|
|
52
|
+
|
|
53
|
+
`DataViewConfig.schemaVersion` 維持 `1`。`viewType` 可選 `table`/`gantt`/`calendar`;三者共用同一份 `rows`、`fields`、篩選、排序、分組、收合與權限。多數新介面為選填;分頁移除、人員/關聯篩選與分組改用 ID、排程日期分類為行為變更,必須先依接入說明檢查相容性。
|
|
54
|
+
|
|
55
|
+
- `gantt`:指定 `titleFieldId`、`startFieldId`、`endFieldId`,選填 `groupFieldId`、`progressFieldId`。分組同步共用第一層,進度為 0–1。
|
|
56
|
+
- `calendar`:指定 `titleFieldId`、`dateFieldId`;選填 `startTimeFieldId`、`endTimeFieldId`(完整日期時間)、`colorFieldId`(選項顏色)。排程以傳入 ISO 日期呈現,adapter 統一時區。
|
|
57
|
+
- `onBatchCommit`:整批 `CellCommit[]`,用於編輯、批次、貼上、清空、復原與重做。專案必須重新驗證身分、schema、權限、前值/revision,以 transaction 保證全成功或全失敗,並用 request id 防止重複寫入。不能逐格寫入後假裝整批成功。
|
|
58
|
+
- `onFieldChange`:新增、複製、重新命名、刪除欄位的意圖。需 `canManageFields: true`;專案自行管理持久化/軟刪/稽核,再更新 `fields`。系統欄位不能由使用者建立或變更。
|
|
59
|
+
- `density`:workbench/compact/standard/comfortable;`virtualize`:桌機資料列與手機表格卡片虛擬化;`colorRules`:個人條件式整列/儲存格填色,不寫入資料。
|
|
60
|
+
|
|
61
|
+
沒有 `onBatchCommit` 的接入專案保留 V1 單格回呼,不啟用批次或歷史。復原/重做只限目前掛載最近 20 次成功資料操作,最多 1,000 格/次,遇衝突拒絕覆寫;不包含附件、欄位結構或外部副作用。
|
|
62
|
+
|
|
63
|
+
每個 Sites 固定精確版本及 lockfile,按 Lab → 一個試點 → 其他專案逐一升級。保留 dependency、ViewConfig 與 schema 快照供回退;回退套件不會自動回復資料修改。不要引用 `latest`、`next` 或範圍版本作自動更新。
|
|
64
|
+
|
|
65
|
+
## 共用修改規則
|
|
66
|
+
|
|
67
|
+
本專案使用 HomeYa 共用資料視圖。遇到表格修改需求時,先判斷是「專案設定」或「共用能力」。專案設定可在本專案修改;共用能力與共用錯誤不得在本專案另行實作,必須整理成共用表格修改單,交由 HomeYa 共用資料視圖專案修改及發布新版本。本專案只在確認相容後升級版本。
|
|
68
|
+
|
|
69
|
+
## 命名視圖(alpha.5)
|
|
70
|
+
|
|
71
|
+
需要多個命名視圖時用 `DataViewWorkspace`,單一視圖原有 `DataView` API 保留。`initialViews` 只在掛載時讀取,必須先載入個人設定再掛載;切換使用者或資料集時由 host 改 `key`。所有視圖共用同一組 `rows`、`fields` 與資料寫入 callbacks。完整範例及回退方法見 [接入說明](./INTEGRATION.md)。
|
|
72
|
+
|
|
73
|
+
不要求第一欄為特殊主欄位,不新增公式引擎。一般欄位仍可依既有規則固定、拖曳或隱藏。
|
|
74
|
+
|
|
75
|
+
alpha.10 同時提供附件迴紋針入口與預設單一關聯的直接選單;選項、永久 ID 與保存由 host adapter 提供,詳見 INTEGRATION.md。
|
|
76
|
+
|
|
77
|
+
alpha.11 加入依視圖保存的分組順序:拖曳、逐格或頂底移動、還原預設;空白分組也可移動。詳見 INTEGRATION.md。
|
|
78
|
+
|
|
79
|
+
alpha.11 的表頭懸浮選單可直接重新命名、複製、隱藏、固定、排序、篩選、分組與確認刪除。結構修改需要 host 的 `onFieldChange` 與管理權限;可用 `features.columnMenu: false` 關閉入口。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { DataViewConfig, DataViewFeatures, DataViewPermissions, FieldChange, FieldDefinition, FilterGroup, FilterRule } from "./types.js";
|
|
2
|
+
export type FieldAction = "rename" | "copy" | "delete";
|
|
3
|
+
export type HeaderAction = FieldAction | "hide" | "pin-left" | "pin-right" | "unpin" | "sort-asc" | "sort-desc" | "clear-sort" | "group" | "filter" | "columns";
|
|
4
|
+
export type HeaderItem = {
|
|
5
|
+
action: HeaderAction;
|
|
6
|
+
label: string;
|
|
7
|
+
icon: string;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
reason?: string;
|
|
10
|
+
danger?: boolean;
|
|
11
|
+
separator?: boolean;
|
|
12
|
+
};
|
|
13
|
+
export declare function copyFieldChange<Row>(source: FieldDefinition<Row>, label?: string): FieldChange<Row> & {
|
|
14
|
+
action: "copy";
|
|
15
|
+
};
|
|
16
|
+
export declare function headerItems<Row>({ field, fields, view, permissions, features, hasFieldCallback, busy }: {
|
|
17
|
+
field: FieldDefinition<Row>;
|
|
18
|
+
fields: FieldDefinition<Row>[];
|
|
19
|
+
view: DataViewConfig;
|
|
20
|
+
permissions?: DataViewPermissions<Row>;
|
|
21
|
+
features?: DataViewFeatures;
|
|
22
|
+
hasFieldCallback: boolean;
|
|
23
|
+
busy: boolean;
|
|
24
|
+
}): HeaderItem[];
|
|
25
|
+
export declare function changeHeaderView(view: DataViewConfig, fieldId: string, action: HeaderAction): DataViewConfig;
|
|
26
|
+
export declare function FieldActionForm<Row>({ action, field, fields, permissions, busy, onApply, onCancel }: {
|
|
27
|
+
action: FieldAction;
|
|
28
|
+
field: FieldDefinition<Row>;
|
|
29
|
+
fields: FieldDefinition<Row>[];
|
|
30
|
+
permissions?: DataViewPermissions<Row>;
|
|
31
|
+
busy: boolean;
|
|
32
|
+
onApply: (change: FieldChange<Row>) => Promise<boolean>;
|
|
33
|
+
onCancel: () => void;
|
|
34
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
35
|
+
export declare function FilterValueInput<Row>({ field, rule, onChange }: {
|
|
36
|
+
field: FieldDefinition<Row>;
|
|
37
|
+
rule: FilterRule;
|
|
38
|
+
onChange: (value: unknown) => void;
|
|
39
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
40
|
+
export declare function ColumnFilterForm<Row>({ field, filters, disabled, onApply, onCancel }: {
|
|
41
|
+
field: FieldDefinition<Row>;
|
|
42
|
+
filters: FilterGroup;
|
|
43
|
+
disabled?: boolean;
|
|
44
|
+
onApply: (rule: FilterRule) => void;
|
|
45
|
+
onCancel: () => void;
|
|
46
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
47
|
+
//# sourceMappingURL=column-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-actions.d.ts","sourceRoot":"","sources":["../src/column-actions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useRef, useState } from "react";
|
|
3
|
+
import { getFieldTypeDefinition, FILTER_OPERATOR_LABELS } from "./registry.js";
|
|
4
|
+
import { newOperationId, validateFieldChange } from "./operations.js";
|
|
5
|
+
export function copyFieldChange(source, label = `${source.label}(副本)`) {
|
|
6
|
+
const { getValue: _getValue, ...definition } = source;
|
|
7
|
+
return { action: "copy", sourceFieldId: source.id, field: { ...definition, id: `field_${newOperationId()}`, label, pinned: null, required: false, options: source.options?.map((option) => ({ ...option })) } };
|
|
8
|
+
}
|
|
9
|
+
export function headerItems({ field, fields, view, permissions, features = {}, hasFieldCallback, busy }) {
|
|
10
|
+
const configurable = permissions?.canConfigureView !== false;
|
|
11
|
+
const column = view.columns.find((item) => item.fieldId === field.id);
|
|
12
|
+
const visibleCount = view.columns.filter((item) => item.visible && fields.some((f) => f.id === item.fieldId && !f.internal)).length;
|
|
13
|
+
const structural = (action) => !hasFieldCallback ? "此專案未開放欄位結構修改" : validateFieldChange(fields, action === "copy" ? copyFieldChange(field) : action === "rename" ? { action, fieldId: field.id, label: field.label } : { action, fieldId: field.id }, permissions) ?? undefined;
|
|
14
|
+
const items = [
|
|
15
|
+
{ action: "rename", label: "重新命名欄位…", icon: "✎", reason: structural("rename") },
|
|
16
|
+
{ action: "copy", label: "複製欄位與值…", icon: "⧉", reason: structural("copy") },
|
|
17
|
+
{ action: "hide", label: "隱藏欄位", icon: "−", reason: !configurable || features.columns === false ? "沒有調整欄位顯示的權限" : visibleCount <= 1 ? "至少保留一個顯示欄位" : undefined },
|
|
18
|
+
{ action: "pin-left", label: "固定在左側", icon: "⇤", separator: true, reason: !configurable || features.columns === false ? "沒有調整欄位位置的權限" : column?.pinned === "left" ? "已固定在左側" : undefined },
|
|
19
|
+
{ action: "pin-right", label: "固定在右側", icon: "⇥", reason: !configurable || features.columns === false ? "沒有調整欄位位置的權限" : column?.pinned === "right" ? "已固定在右側" : undefined },
|
|
20
|
+
{ action: "unpin", label: "取消固定", icon: "↔", reason: !configurable || features.columns === false ? "沒有調整欄位位置的權限" : !column?.pinned ? "此欄位未固定" : undefined },
|
|
21
|
+
{ action: "sort-asc", label: "依此欄升冪排序", icon: "↑", separator: true, reason: !(permissions?.canSort ?? configurable) || features.sort === false ? "未開放排序" : undefined },
|
|
22
|
+
{ action: "sort-desc", label: "依此欄降冪排序", icon: "↓", reason: !(permissions?.canSort ?? configurable) || features.sort === false ? "未開放排序" : undefined },
|
|
23
|
+
{ action: "clear-sort", label: "取消此欄排序", icon: "↕", reason: !(permissions?.canSort ?? configurable) || features.sort === false ? "未開放排序" : !view.sorts.some((item) => item.fieldId === field.id) ? "此欄位未設定排序" : undefined },
|
|
24
|
+
{ action: "filter", label: "篩選此欄…", icon: "▽", reason: !(permissions?.canFilter ?? configurable) || features.filter === false ? "未開放篩選" : view.filters.rules.length >= 20 && !view.filters.rules.some((rule) => rule.fieldId === field.id) ? "最多二十個篩選條件" : undefined },
|
|
25
|
+
{ action: "group", label: view.groups.some((item) => item.fieldId === field.id) ? "調整此欄分組…" : "依此欄分組", icon: "▤", reason: !configurable || features.group === false ? "未開放分組" : view.groups.length >= 3 && !view.groups.some((item) => item.fieldId === field.id) ? "最多三層分組" : undefined },
|
|
26
|
+
{ action: "columns", label: "電腦表格欄位…", icon: "▥", separator: true, reason: !configurable || features.columns === false ? "未開放欄位設定" : undefined },
|
|
27
|
+
{ action: "delete", label: "刪除欄位…", icon: "×", danger: true, reason: structural("delete") },
|
|
28
|
+
];
|
|
29
|
+
return items.map((item) => ({ ...item, disabled: busy || !!item.reason, reason: busy ? "正在儲存,請稍候" : item.reason }));
|
|
30
|
+
}
|
|
31
|
+
export function changeHeaderView(view, fieldId, action) {
|
|
32
|
+
if (!view.columns.some((column) => column.fieldId === fieldId))
|
|
33
|
+
return view;
|
|
34
|
+
if (action === "hide") {
|
|
35
|
+
if (view.columns.filter((column) => column.visible).length <= 1)
|
|
36
|
+
return view;
|
|
37
|
+
return { ...view, columns: view.columns.map((column) => column.fieldId === fieldId ? { ...column, visible: false } : column) };
|
|
38
|
+
}
|
|
39
|
+
if (action === "pin-left" || action === "pin-right" || action === "unpin")
|
|
40
|
+
return { ...view, columns: view.columns.map((column) => column.fieldId === fieldId ? { ...column, pinned: action === "pin-left" ? "left" : action === "pin-right" ? "right" : null } : column) };
|
|
41
|
+
if (action === "sort-asc" || action === "sort-desc")
|
|
42
|
+
return { ...view, sorts: [{ fieldId, direction: action === "sort-asc" ? "asc" : "desc" }, ...view.sorts.filter((rule) => rule.fieldId !== fieldId)] };
|
|
43
|
+
if (action === "clear-sort")
|
|
44
|
+
return { ...view, sorts: view.sorts.filter((rule) => rule.fieldId !== fieldId) };
|
|
45
|
+
if (action === "group" && view.groups.length < 3 && !view.groups.some((rule) => rule.fieldId === fieldId))
|
|
46
|
+
return { ...view, groups: [...view.groups, { fieldId }] };
|
|
47
|
+
return view;
|
|
48
|
+
}
|
|
49
|
+
export function FieldActionForm({ action, field, fields, permissions, busy, onApply, onCancel }) {
|
|
50
|
+
const [label, setLabel] = useState(action === "copy" ? `${field.label}(副本)` : field.label);
|
|
51
|
+
const [message, setMessage] = useState("");
|
|
52
|
+
const submitting = useRef(false);
|
|
53
|
+
async function submit() {
|
|
54
|
+
if (busy || submitting.current)
|
|
55
|
+
return;
|
|
56
|
+
const change = action === "copy" ? copyFieldChange(field, label.trim()) : action === "rename" ? { action, fieldId: field.id, label: label.trim() } : { action, fieldId: field.id };
|
|
57
|
+
const error = validateFieldChange(fields, change, permissions);
|
|
58
|
+
if (error) {
|
|
59
|
+
setMessage(error);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
submitting.current = true;
|
|
63
|
+
try {
|
|
64
|
+
if (await onApply(change))
|
|
65
|
+
onCancel();
|
|
66
|
+
else
|
|
67
|
+
setMessage("未完成,請查看儲存提示後重試。");
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
submitting.current = false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return _jsxs("form", { className: "hy-dv-form", onSubmit: (event) => { event.preventDefault(); void submit(); }, children: [_jsxs("fieldset", { disabled: busy || permissions?.canManageFields !== true, children: [_jsx("legend", { children: field.label }), action === "delete" ? _jsxs("p", { children: ["\u78BA\u8A8D\u522A\u9664\u300C", field.label, "\u300D\uFF1F\u5F15\u7528\u5B83\u7684\u7BE9\u9078\u3001\u6392\u5E8F\u3001\u586B\u8272\u8207\u8996\u5716\u6620\u5C04\u5C07\u88AB\u6E05\u9664\u3002\u8CC7\u6599\u4FDD\u7559\u65B9\u5F0F\u7531\u5C08\u6848\u6C7A\u5B9A\uFF0C\u6B64\u64CD\u4F5C\u4E0D\u5728\u8CC7\u6599\u5FA9\u539F\u7BC4\u570D\u5167\u3002"] }) : _jsxs("label", { children: [action === "copy" ? "新欄位名稱" : "欄位名稱", _jsx("input", { autoFocus: true, required: true, maxLength: 80, value: label, onChange: (event) => setLabel(event.target.value) })] }), action === "copy" && _jsx("p", { children: "\u5C07\u5EFA\u7ACB\u65B0\u6B04\u4F4D\uFF0C\u4E26\u8907\u88FD\u539F\u6B04\u4F4D\u7684\u8CC7\u6599\u503C\u3002" }), _jsxs("div", { className: "hy-dv-actions", children: [_jsx("button", { type: "button", autoFocus: action === "delete", onClick: onCancel, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", className: action === "delete" ? "hy-dv-danger" : "hy-dv-primary", disabled: action !== "delete" && (!label.trim() || action === "rename" && label.trim() === field.label), children: action === "delete" ? "確認刪除欄位" : action === "copy" ? "確認複製" : "儲存名稱" })] })] }), message && _jsx("p", { role: "alert", children: message })] });
|
|
74
|
+
}
|
|
75
|
+
export function FilterValueInput({ field, rule, onChange }) {
|
|
76
|
+
if (["isEmpty", "isNotEmpty", "isTrue", "isFalse"].includes(rule.operator))
|
|
77
|
+
return _jsx("span", { className: "hy-dv-no-value", children: "\u4E0D\u9700\u586B\u503C" });
|
|
78
|
+
if (field.options?.length)
|
|
79
|
+
return _jsxs("select", { value: String(rule.value ?? ""), onChange: (event) => onChange(event.target.value), children: [_jsx("option", { value: "", children: "\u8ACB\u9078\u64C7" }), field.options.map((option) => _jsx("option", { value: option.value, children: option.label }, option.value))] });
|
|
80
|
+
if (["number", "currency", "percentage", "autoNumber"].includes(field.type))
|
|
81
|
+
return _jsx("input", { type: "number", value: String(rule.value ?? ""), onChange: (event) => onChange(event.target.value === "" ? undefined : Number(event.target.value)) });
|
|
82
|
+
if (["date", "dateTime", "createdAt", "updatedAt"].includes(field.type))
|
|
83
|
+
return _jsx("input", { type: "date", value: String(rule.value ?? "").slice(0, 10), onChange: (event) => onChange(event.target.value) });
|
|
84
|
+
return _jsx("input", { value: String(rule.value ?? ""), onChange: (event) => onChange(event.target.value), placeholder: "\u8F38\u5165\u689D\u4EF6" });
|
|
85
|
+
}
|
|
86
|
+
export function ColumnFilterForm({ field, filters, disabled = false, onApply, onCancel }) {
|
|
87
|
+
const operators = getFieldTypeDefinition(field.type).operators;
|
|
88
|
+
const [rule, setRule] = useState(() => filters.rules.find((item) => item.fieldId === field.id) ?? { id: newOperationId(), fieldId: field.id, operator: operators[0] });
|
|
89
|
+
return _jsx("form", { className: "hy-dv-form", onSubmit: (event) => { event.preventDefault(); if (!disabled)
|
|
90
|
+
onApply(rule); }, children: _jsxs("fieldset", { disabled: disabled, children: [_jsx("legend", { children: field.label }), _jsxs("label", { children: ["\u689D\u4EF6", _jsx("select", { autoFocus: true, value: rule.operator, onChange: (event) => setRule({ ...rule, operator: event.target.value, value: undefined }), children: operators.map((operator) => _jsx("option", { value: operator, children: FILTER_OPERATOR_LABELS[operator] }, operator)) })] }), _jsxs("label", { children: ["\u689D\u4EF6\u503C", _jsx(FilterValueInput, { field: field, rule: rule, onChange: (value) => setRule({ ...rule, value }) })] }), _jsxs("div", { className: "hy-dv-actions", children: [_jsx("button", { type: "button", onClick: onCancel, children: "\u53D6\u6D88" }), _jsx("button", { type: "submit", children: "\u5957\u7528\u7BE9\u9078" })] })] }) });
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=column-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-actions.js","sourceRoot":"","sources":["../src/column-actions.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { HeaderAction, HeaderItem } from "./column-actions.js";
|
|
2
|
+
export declare function columnMenuPosition(anchor: {
|
|
3
|
+
left: number;
|
|
4
|
+
right: number;
|
|
5
|
+
top: number;
|
|
6
|
+
bottom: number;
|
|
7
|
+
}, menu: {
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
}, viewport: {
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
}): {
|
|
14
|
+
left: number;
|
|
15
|
+
top: number;
|
|
16
|
+
};
|
|
17
|
+
export declare function ColumnMenu({ id, label, anchor, items, onChoose, onClose }: {
|
|
18
|
+
id: string;
|
|
19
|
+
label: string;
|
|
20
|
+
anchor: HTMLButtonElement;
|
|
21
|
+
items: HeaderItem[];
|
|
22
|
+
onChoose: (action: HeaderAction) => void;
|
|
23
|
+
onClose: () => void;
|
|
24
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=column-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-menu.d.ts","sourceRoot":"","sources":["../src/column-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;;;EAE5L;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,2CAkCvN"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { DataViewDialog } from "./v2-panels.js";
|
|
4
|
+
export function columnMenuPosition(anchor, menu, viewport) {
|
|
5
|
+
return { left: Math.max(8, Math.min(anchor.right - menu.width, viewport.width - menu.width - 8)), top: Math.max(8, Math.min(anchor.bottom + 4 + menu.height <= viewport.height - 8 ? anchor.bottom + 4 : anchor.top - menu.height - 4, viewport.height - menu.height - 8)) };
|
|
6
|
+
}
|
|
7
|
+
export function ColumnMenu({ id, label, anchor, items, onChoose, onClose }) {
|
|
8
|
+
const ref = useRef(null);
|
|
9
|
+
const close = useRef(onClose);
|
|
10
|
+
close.current = onClose;
|
|
11
|
+
const [fallback, setFallback] = useState(false);
|
|
12
|
+
useEffect(() => {
|
|
13
|
+
const menu = ref.current;
|
|
14
|
+
if (!menu)
|
|
15
|
+
return;
|
|
16
|
+
if (typeof menu.showPopover !== "function") {
|
|
17
|
+
setFallback(true);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const dismiss = (event) => { if (event.newState === "closed")
|
|
21
|
+
close.current(); };
|
|
22
|
+
const moved = (event) => { if (!(event.target instanceof Node) || !menu.contains(event.target))
|
|
23
|
+
close.current(); };
|
|
24
|
+
menu.addEventListener("toggle", dismiss);
|
|
25
|
+
menu.showPopover();
|
|
26
|
+
const position = columnMenuPosition(anchor.getBoundingClientRect(), menu.getBoundingClientRect(), { width: window.innerWidth, height: window.innerHeight });
|
|
27
|
+
menu.style.left = `${position.left}px`;
|
|
28
|
+
menu.style.top = `${position.top}px`;
|
|
29
|
+
(menu.querySelector("button:not(:disabled)") ?? menu).focus();
|
|
30
|
+
window.addEventListener("scroll", moved, true);
|
|
31
|
+
window.addEventListener("resize", moved);
|
|
32
|
+
return () => { menu.removeEventListener("toggle", dismiss); window.removeEventListener("scroll", moved, true); window.removeEventListener("resize", moved); if (menu.matches(":popover-open"))
|
|
33
|
+
menu.hidePopover(); };
|
|
34
|
+
}, [anchor]);
|
|
35
|
+
function keyDown(event) {
|
|
36
|
+
const menu = event.currentTarget;
|
|
37
|
+
if (event.key === "Tab" && !fallback) {
|
|
38
|
+
anchor.focus();
|
|
39
|
+
onClose();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (event.key === "Escape") {
|
|
43
|
+
event.preventDefault();
|
|
44
|
+
event.stopPropagation();
|
|
45
|
+
anchor.focus();
|
|
46
|
+
onClose();
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const buttons = [...menu.querySelectorAll("button:not(:disabled)")];
|
|
50
|
+
if (!buttons.length || !["ArrowDown", "ArrowUp", "Home", "End"].includes(event.key))
|
|
51
|
+
return;
|
|
52
|
+
event.preventDefault();
|
|
53
|
+
event.stopPropagation();
|
|
54
|
+
const index = buttons.indexOf(document.activeElement);
|
|
55
|
+
const target = event.key === "Home" ? 0 : event.key === "End" ? buttons.length - 1 : (index + (event.key === "ArrowDown" ? 1 : -1) + buttons.length) % buttons.length;
|
|
56
|
+
buttons[target].focus();
|
|
57
|
+
}
|
|
58
|
+
const body = _jsx("div", { id: fallback ? id : undefined, role: fallback ? "menu" : undefined, "aria-label": fallback ? `${label}欄位操作` : undefined, onKeyDown: keyDown, children: items.map((item) => _jsxs("button", { type: "button", role: "menuitem", tabIndex: fallback ? 0 : -1, disabled: item.disabled, title: item.reason, className: `${item.danger ? "hy-dv-danger" : ""} ${item.separator ? "has-separator" : ""}`, onClick: () => { anchor.focus(); onChoose(item.action); }, children: [_jsx("span", { "aria-hidden": "true", children: item.icon }), _jsx("span", { children: item.label })] }, item.action)) });
|
|
59
|
+
if (fallback)
|
|
60
|
+
return _jsx(DataViewDialog, { title: `${label}欄位操作`, onClose: () => { anchor.focus(); onClose(); }, children: _jsx("div", { className: "hy-dv-header-menu-fallback", children: body }) });
|
|
61
|
+
return _jsx("div", { id: id, ref: ref, popover: "auto", role: "menu", tabIndex: -1, "aria-label": `${label}欄位操作`, className: "hy-dv-header-menu", onBlur: (event) => { if (event.relatedTarget instanceof Node && event.relatedTarget !== anchor && !event.currentTarget.contains(event.relatedTarget))
|
|
62
|
+
onClose(); }, children: body });
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=column-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-menu.js","sourceRoot":"","sources":["../src/column-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { DataViewConfig, DataViewMetrics, DataViewQuery, FieldDefinition, ViewRuntimeState } from "./types.js";
|
|
2
|
+
export declare const WORKBENCH_METRICS: DataViewMetrics;
|
|
3
|
+
export declare function resolveMetrics(density: DataViewConfig["density"], input?: Partial<DataViewMetrics>): DataViewMetrics;
|
|
4
|
+
export declare function splitViewState(view: DataViewConfig): {
|
|
5
|
+
layout: DataViewConfig;
|
|
6
|
+
runtime: ViewRuntimeState;
|
|
7
|
+
};
|
|
8
|
+
export declare function mergeViewState(layout: DataViewConfig, runtime?: ViewRuntimeState): DataViewConfig;
|
|
9
|
+
export declare function createDataViewQuery(view: DataViewConfig): DataViewQuery;
|
|
10
|
+
/** JSON-safe canonical key: callers must reset remote rows whenever this changes. */
|
|
11
|
+
export declare function dataViewQueryKey(query: DataViewQuery): string;
|
|
12
|
+
/** Diagnostics do not silently rewrite or infer business field mappings. */
|
|
13
|
+
export declare function inspectViewMigration<Row>(fields: FieldDefinition<Row>[], view: Partial<DataViewConfig>): {
|
|
14
|
+
code: string;
|
|
15
|
+
fieldId?: string;
|
|
16
|
+
message: string;
|
|
17
|
+
}[];
|
|
18
|
+
/** Locks intersecting rows; independent rows run concurrently. '*' is a schema barrier. */
|
|
19
|
+
export declare function createWriteQueue(): {
|
|
20
|
+
readonly pending: number;
|
|
21
|
+
dispose(): void;
|
|
22
|
+
run<T>(resources: string[], action: () => Promise<T> | T): Promise<T>;
|
|
23
|
+
};
|
|
24
|
+
/** Prefix offsets support independently sized group rows without virtual scroll drift. */
|
|
25
|
+
export declare function virtualWindow(heights: number[], top: number, viewport: number, overscan?: number): {
|
|
26
|
+
offsets: number[];
|
|
27
|
+
start: number;
|
|
28
|
+
end: number;
|
|
29
|
+
before: number;
|
|
30
|
+
after: number;
|
|
31
|
+
total: number;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpH,eAAO,MAAM,iBAAiB,EAAE,eAK/B,CAAC;AACF,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAQpH;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,gBAAgB,CAAA;CAAE,CAG1G;AACD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,cAAc,CAEjG;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,GAAG,aAAa,CAGvE;AACD,qFAAqF;AACrF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,UAAmC;AAExF,4EAA4E;AAC5E,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC;UAEpE,MAAM;cAAY,MAAM;aAAW,MAAM;IAO3E;AAED,2FAA2F;AAC3F,wBAAgB,gBAAgB;;;QAOxB,CAAC,aAAa,MAAM,EAAE,UAAU,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;EAUxE;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,SAAI;;;;;;;EAM3F"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export const WORKBENCH_METRICS = {
|
|
2
|
+
rowHeight: 32, headerHeight: 32, groupHeight: 28, groupGap: 8, nestedGroupGap: 4,
|
|
3
|
+
cellFontSize: 13, cellLineHeight: 16, headerFontSize: 12, cellPadding: 6,
|
|
4
|
+
headerPaddingLeft: 6, headerPaddingRight: 12, controlHeight: 28, actionHeight: 24,
|
|
5
|
+
badgeHeight: 20, badgeFontSize: 11, badgePadding: 8, scrollbarHeight: 16, scrollbarThumb: 12,
|
|
6
|
+
};
|
|
7
|
+
export function resolveMetrics(density, input) {
|
|
8
|
+
const base = density === "workbench" ? WORKBENCH_METRICS : { ...WORKBENCH_METRICS, rowHeight: density === "compact" ? 36 : density === "comfortable" ? 72 : 52, headerHeight: 36, cellFontSize: 14, headerFontSize: 13, badgeFontSize: 12 };
|
|
9
|
+
const out = { ...base };
|
|
10
|
+
for (const key of Object.keys(base)) {
|
|
11
|
+
const value = input?.[key];
|
|
12
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= (key.endsWith("Gap") ? 0 : 1) && value <= 500)
|
|
13
|
+
out[key] = value;
|
|
14
|
+
}
|
|
15
|
+
return out;
|
|
16
|
+
}
|
|
17
|
+
export function splitViewState(view) {
|
|
18
|
+
const { location, collapsedGroups, ...layout } = view;
|
|
19
|
+
return { layout: { ...layout, collapsedGroups: [] }, runtime: { location, collapsedGroups } };
|
|
20
|
+
}
|
|
21
|
+
export function mergeViewState(layout, runtime) {
|
|
22
|
+
return { ...layout, ...runtime, location: { ...layout.location, ...runtime?.location } };
|
|
23
|
+
}
|
|
24
|
+
export function createDataViewQuery(view) {
|
|
25
|
+
// Group display order is a local layout preference, not a remote data query change.
|
|
26
|
+
return { version: 1, search: view.location?.search ?? "", filters: view.filters, sorts: view.sorts, groups: view.groups.map(({ fieldId }) => ({ fieldId })) };
|
|
27
|
+
}
|
|
28
|
+
/** JSON-safe canonical key: callers must reset remote rows whenever this changes. */
|
|
29
|
+
export function dataViewQueryKey(query) { return JSON.stringify(query); }
|
|
30
|
+
/** Diagnostics do not silently rewrite or infer business field mappings. */
|
|
31
|
+
export function inspectViewMigration(fields, view) {
|
|
32
|
+
const ids = new Set(fields.map((f) => f.id));
|
|
33
|
+
const diagnostics = [];
|
|
34
|
+
for (const id of new Set([...(view.columns ?? []).map((c) => c.fieldId), ...(view.sorts ?? []).map((s) => s.fieldId), ...(view.groups ?? []).map((g) => g.fieldId), ...(view.filters?.rules ?? []).map((r) => r.fieldId)])) {
|
|
35
|
+
if (!ids.has(id))
|
|
36
|
+
diagnostics.push({ code: "unknown-field", fieldId: id, message: "欄位不存在,請由專案提供舊 ID 映射後再正規化" });
|
|
37
|
+
}
|
|
38
|
+
if (view.pageSize !== undefined || (view.location?.page ?? 1) > 1)
|
|
39
|
+
diagnostics.push({ code: "pagination-removed", message: "分頁已移除;保留原始設定備份,使用連續捲動" });
|
|
40
|
+
if (view.collapsedGroups?.length && view.groups?.some((g) => fields.some((f) => f.id === g.fieldId && ["person", "relation", "multiSelect", "createdBy", "updatedBy"].includes(f.type))))
|
|
41
|
+
diagnostics.push({ code: "stable-group-keys", message: "人員/關聯/多選改用穩定 ID;舊收合鍵須由舊資料對照轉換,否則這些分組首次展開" });
|
|
42
|
+
return diagnostics;
|
|
43
|
+
}
|
|
44
|
+
/** Locks intersecting rows; independent rows run concurrently. '*' is a schema barrier. */
|
|
45
|
+
export function createWriteQueue() {
|
|
46
|
+
const tails = new Map();
|
|
47
|
+
const all = new Set();
|
|
48
|
+
let disposed = false;
|
|
49
|
+
return {
|
|
50
|
+
get pending() { return all.size; },
|
|
51
|
+
dispose() { disposed = true; },
|
|
52
|
+
run(resources, action) {
|
|
53
|
+
const keys = [...new Set(resources)];
|
|
54
|
+
const waiting = keys.includes("*") ? [...all] : [tails.get("*"), ...keys.map((key) => tails.get(key))].filter(Boolean);
|
|
55
|
+
const result = Promise.all(waiting.map((p) => p.catch(() => { }))).then(() => { if (disposed)
|
|
56
|
+
throw new Error("檢視身分已切換,尚未送出的操作已取消"); return action(); });
|
|
57
|
+
all.add(result);
|
|
58
|
+
for (const key of keys)
|
|
59
|
+
tails.set(key, result);
|
|
60
|
+
const clear = () => { all.delete(result); for (const key of keys)
|
|
61
|
+
if (tails.get(key) === result)
|
|
62
|
+
tails.delete(key); };
|
|
63
|
+
void result.then(clear, clear);
|
|
64
|
+
return result;
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** Prefix offsets support independently sized group rows without virtual scroll drift. */
|
|
69
|
+
export function virtualWindow(heights, top, viewport, overscan = 5) {
|
|
70
|
+
const offsets = [0];
|
|
71
|
+
for (const height of heights)
|
|
72
|
+
offsets.push(offsets.at(-1) + height);
|
|
73
|
+
const lower = (value) => { let lo = 0, hi = heights.length; while (lo < hi) {
|
|
74
|
+
const mid = (lo + hi) >>> 1;
|
|
75
|
+
if (offsets[mid + 1] <= value)
|
|
76
|
+
lo = mid + 1;
|
|
77
|
+
else
|
|
78
|
+
hi = mid;
|
|
79
|
+
} return lo; };
|
|
80
|
+
const start = Math.max(0, lower(Math.max(0, top)) - overscan);
|
|
81
|
+
const end = Math.min(heights.length, lower(Math.max(0, top) + Math.max(1, viewport)) + overscan + 1);
|
|
82
|
+
return { offsets, start, end, before: offsets[start], after: offsets.at(-1) - offsets[end], total: offsets.at(-1) };
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-view.d.ts","sourceRoot":"","sources":["../src/data-view.tsx"],"names":[],"mappings":"AA8CA,OAAO,KAAK,EAIV,aAAa,EAWd,MAAM,YAAY,CAAC;AAQpB,wBAAgB,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,2CAEtD"}
|