fieldsmith 0.1.0 → 0.2.1
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/README.md +499 -7
- package/dist/cli/index.js +283 -20
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/schema.js +43 -3
- package/dist/cli/schema.js.map +1 -1
- package/dist/config.js +36 -3
- package/dist/config.js.map +1 -1
- package/dist/csv.js +119 -0
- package/dist/csv.js.map +1 -0
- package/dist/icon/name.js +48 -0
- package/dist/icon/name.js.map +1 -0
- package/dist/icon/render.js +0 -21
- package/dist/icon/render.js.map +1 -1
- package/dist/kintone/client.js +6 -1
- package/dist/kintone/client.js.map +1 -1
- package/dist/kintone/deploy.js +146 -15
- package/dist/kintone/deploy.js.map +1 -1
- package/dist/kintone/link.js +428 -0
- package/dist/kintone/link.js.map +1 -0
- package/dist/llm/generate.js +20 -4
- package/dist/llm/generate.js.map +1 -1
- package/dist/llm/prompt.js +3 -1
- package/dist/llm/prompt.js.map +1 -1
- package/dist/spec/appSpec.js +189 -3
- package/dist/spec/appSpec.js.map +1 -1
- package/dist/spec/checkRecords.js +191 -0
- package/dist/spec/checkRecords.js.map +1 -0
- package/dist/spec/describeForm.js +65 -0
- package/dist/spec/describeForm.js.map +1 -0
- package/dist/spec/diff.js +170 -8
- package/dist/spec/diff.js.map +1 -1
- package/dist/spec/fieldSpec.js +60 -8
- package/dist/spec/fieldSpec.js.map +1 -1
- package/dist/spec/fromKintone.js +127 -15
- package/dist/spec/fromKintone.js.map +1 -1
- package/dist/spec/layout.js +333 -30
- package/dist/spec/layout.js.map +1 -1
- package/dist/spec/linkSpec.js +0 -0
- package/dist/spec/linkSpec.js.map +1 -0
- package/dist/spec/toKintone.js +38 -3
- package/dist/spec/toKintone.js.map +1 -1
- package/package.json +4 -2
package/dist/spec/fromKintone.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import { SUPPORTED_FIELD_TYPES } from "./fieldSpec.js";
|
|
1
|
+
import { deriveFieldCode, SUPPORTED_FIELD_TYPES } from "./fieldSpec.js";
|
|
2
|
+
import { ORPHAN_GROUP_CODE } from "./layout.js";
|
|
3
|
+
import { parseIconFileName } from "../icon/name.js";
|
|
2
4
|
/** アプリ作成時に自動で用意されるので、AppSpec には書かないフィールド型。 */
|
|
3
5
|
const AUTO_FIELD_TYPES = new Set([
|
|
4
6
|
"RECORD_NUMBER",
|
|
@@ -11,40 +13,106 @@ const AUTO_FIELD_TYPES = new Set([
|
|
|
11
13
|
"CATEGORY",
|
|
12
14
|
]);
|
|
13
15
|
const SUPPORTED = new Set(SUPPORTED_FIELD_TYPES);
|
|
16
|
+
/**
|
|
17
|
+
* グループはフィールドとしては書き出さない。
|
|
18
|
+
* `layout: "sections"` と各フィールドの `group` として表現するので、
|
|
19
|
+
* 「表現できなかった」わけではない。警告も出さない。
|
|
20
|
+
*/
|
|
21
|
+
const LAYOUT_FIELD_TYPES = new Set(["GROUP"]);
|
|
14
22
|
export function toAppSpecFromKintone(input) {
|
|
15
23
|
const warnings = [];
|
|
16
24
|
const order = fieldOrderFromLayout(input.layout ?? []);
|
|
17
|
-
const
|
|
18
|
-
|
|
25
|
+
const sections = sectionsFromLayout(input.layout ?? [], input.properties);
|
|
26
|
+
const named = (property) => property["label"] ?? property["code"];
|
|
27
|
+
/** その 1 フィールドを AppSpec に持ち込めるか。持ち込めない事情は warnings に残す。 */
|
|
28
|
+
const keep = (property) => {
|
|
19
29
|
const type = String(property["type"]);
|
|
20
30
|
if (AUTO_FIELD_TYPES.has(type))
|
|
21
31
|
return false;
|
|
32
|
+
if (LAYOUT_FIELD_TYPES.has(type))
|
|
33
|
+
return false;
|
|
22
34
|
if (!SUPPORTED.has(type)) {
|
|
23
|
-
warnings.push(`フィールド「${property
|
|
24
|
-
"
|
|
35
|
+
warnings.push(`フィールド「${named(property)}」(${type}) は AppSpec で表現できないため除きました。` +
|
|
36
|
+
" デプロイし直しても、このフィールドは作られません" +
|
|
37
|
+
" (既存アプリの update では、フォーム上のこのフィールドはそのまま残ります)。");
|
|
25
38
|
return false;
|
|
26
39
|
}
|
|
40
|
+
// ルックアップは独立した型ではなく、SINGLE_LINE_TEXT / NUMBER / LINK に
|
|
41
|
+
// 設定を付けたもの。型の検査だけでは素通りしてしまう。
|
|
42
|
+
//
|
|
43
|
+
// フィールドごと落とすのではなく、ただの文字列などとして残す。そこには
|
|
44
|
+
// 実際にデータが入っているし、AppSpec の側でもアプリ間の参照は
|
|
45
|
+
// 「人が kintone 上で繋ぐ」前提にしているため。
|
|
46
|
+
// @see README.md「ルックアップを対象外にしている理由」
|
|
47
|
+
if (property["lookup"] !== undefined) {
|
|
48
|
+
warnings.push(`フィールド「${named(property)}」のルックアップ設定は` +
|
|
49
|
+
" AppSpec に含められないため落としました。フィールド自体は残しています" +
|
|
50
|
+
" (この spec をデプロイすると、ルックアップではないフィールドになります)。");
|
|
51
|
+
}
|
|
27
52
|
return true;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
|
|
53
|
+
};
|
|
54
|
+
// テーブルは入れ子だが、AppSpec では列を平らに並べて `table` で結ぶ。
|
|
55
|
+
// ここで入れ子をほどいて、外のフィールドと同じ土俵に乗せる。
|
|
56
|
+
const entries = [];
|
|
57
|
+
for (const [code, property] of Object.entries(input.properties)) {
|
|
58
|
+
if (String(property["type"]) !== "SUBTABLE") {
|
|
59
|
+
if (keep(property))
|
|
60
|
+
entries.push([code, property, undefined]);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// テーブル名は `table` に書く値なので、そこからコードに戻せる必要がある。
|
|
64
|
+
const label = property["label"];
|
|
65
|
+
const name = typeof label === "string" && deriveFieldCode(label) === code ? label : code;
|
|
66
|
+
const columns = (property["fields"] ?? {});
|
|
67
|
+
for (const [columnCode, column] of Object.entries(columns)) {
|
|
68
|
+
if (keep(column))
|
|
69
|
+
entries.push([columnCode, column, name]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// レイアウト上の位置で並べる。レイアウトに無いものは末尾へ。
|
|
73
|
+
entries.sort(([codeA], [codeB]) => {
|
|
31
74
|
const a = order.get(codeA) ?? Number.MAX_SAFE_INTEGER;
|
|
32
75
|
const b = order.get(codeB) ?? Number.MAX_SAFE_INTEGER;
|
|
33
76
|
return a - b;
|
|
34
77
|
});
|
|
35
78
|
const spec = {
|
|
36
79
|
name: input.name,
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
80
|
+
/*
|
|
81
|
+
* 横並びは読み取れない。1 行に 3 つ並んでいても、fieldsmith が並べたのか
|
|
82
|
+
* 人が画面で並べたのか区別が付かないので、`stacked` (既存の並びに触れない) と言う。
|
|
83
|
+
*
|
|
84
|
+
* グループは読み取れる。レイアウトに GROUP があれば、それは疑いなくセクションなので、
|
|
85
|
+
* `sections` と名乗って往復できるようにする。
|
|
86
|
+
*/
|
|
87
|
+
layout: sections.size > 0 ? "sections" : "stacked",
|
|
88
|
+
fields: entries.map(([code, property, table]) => {
|
|
89
|
+
const field = toFieldSpec(property);
|
|
90
|
+
if (table !== undefined)
|
|
91
|
+
field["table"] = table;
|
|
92
|
+
const section = sections.get(code);
|
|
93
|
+
if (section !== undefined)
|
|
94
|
+
field["group"] = section;
|
|
95
|
+
return field;
|
|
96
|
+
}),
|
|
40
97
|
};
|
|
41
98
|
assign(spec, "description", input.description);
|
|
42
99
|
assign(spec, "theme", input.theme);
|
|
43
|
-
// アイコンは kintone
|
|
44
|
-
//
|
|
100
|
+
// アイコンは kintone からは画像として返る。fieldsmith が上げたものなら
|
|
101
|
+
// ファイル名に何を描いたかが残っているので、そこから戻す。
|
|
102
|
+
// 既定の組込みアイコンは指定していないのと同じなので、画像のときだけ見る。
|
|
45
103
|
if (input.icon?.type === "FILE") {
|
|
46
|
-
|
|
47
|
-
|
|
104
|
+
const fileName = input.icon.file?.name;
|
|
105
|
+
const parsed = fileName === undefined ? null : parseIconFileName(fileName);
|
|
106
|
+
if (parsed === null) {
|
|
107
|
+
warnings.push("アプリアイコンに画像が設定されていますが、AppSpec には含められません。" +
|
|
108
|
+
' 必要なら icon に絵文字か頭文字を書いてください (例: "icon": "💼")。');
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
spec["icon"] = parsed.glyph;
|
|
112
|
+
// 背景色は既定と同じでも書き出す。書かないと「spec に無い = 現状維持」と
|
|
113
|
+
// 「既定値と同じ」が見分けられず、書いた人の側で偽の差分になる。
|
|
114
|
+
spec["iconBackground"] = parsed.background;
|
|
115
|
+
}
|
|
48
116
|
}
|
|
49
117
|
const views = input.views === undefined ? [] : toViewSpecs(input.views, warnings);
|
|
50
118
|
if (views.length > 0)
|
|
@@ -75,6 +143,50 @@ function fieldOrderFromLayout(layout) {
|
|
|
75
143
|
walk(layout);
|
|
76
144
|
return order;
|
|
77
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* レイアウトのグループを辿って、フィールドコード → セクション名を作る。
|
|
148
|
+
*
|
|
149
|
+
* セクション名は `group` に書く値なので、**そこからグループのフィールドコードに
|
|
150
|
+
* 戻せる**必要がある。ラベルから導出したコードが実物と一致するならラベルを使い、
|
|
151
|
+
* 一致しないならコードをそのまま名前にする (往復で別のグループを作らないため)。
|
|
152
|
+
*/
|
|
153
|
+
function sectionsFromLayout(layout, properties) {
|
|
154
|
+
const sections = new Map();
|
|
155
|
+
for (const row of layout) {
|
|
156
|
+
if (row["type"] !== "GROUP")
|
|
157
|
+
continue;
|
|
158
|
+
const code = String(row["code"] ?? "");
|
|
159
|
+
// 削除候補は fieldsmith の退避先であって、人が意図したセクションではない。
|
|
160
|
+
if (code === "" || code === ORPHAN_GROUP_CODE)
|
|
161
|
+
continue;
|
|
162
|
+
const label = properties[code]?.["label"];
|
|
163
|
+
const name = typeof label === "string" && deriveFieldCode(label) === code ? label : code;
|
|
164
|
+
const nested = row["layout"];
|
|
165
|
+
if (!Array.isArray(nested))
|
|
166
|
+
continue;
|
|
167
|
+
for (const field of collectFieldCodes(nested)) {
|
|
168
|
+
sections.set(field, name);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return sections;
|
|
172
|
+
}
|
|
173
|
+
/** 入れ子も含めて、行に載っているフィールドコードを集める。 */
|
|
174
|
+
function collectFieldCodes(rows) {
|
|
175
|
+
const codes = [];
|
|
176
|
+
for (const row of rows) {
|
|
177
|
+
const fields = row["fields"];
|
|
178
|
+
if (Array.isArray(fields)) {
|
|
179
|
+
for (const field of fields) {
|
|
180
|
+
if (typeof field.code === "string")
|
|
181
|
+
codes.push(field.code);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
const nested = row["layout"];
|
|
185
|
+
if (Array.isArray(nested))
|
|
186
|
+
codes.push(...collectFieldCodes(nested));
|
|
187
|
+
}
|
|
188
|
+
return codes;
|
|
189
|
+
}
|
|
78
190
|
function toFieldSpec(property) {
|
|
79
191
|
const type = String(property["type"]);
|
|
80
192
|
const field = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fromKintone.js","sourceRoot":"","sources":["../../src/spec/fromKintone.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fromKintone.js","sourceRoot":"","sources":["../../src/spec/fromKintone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAA2B,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAwBpD,8CAA8C;AAC9C,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,eAAe;IACf,SAAS;IACT,cAAc;IACd,UAAU;IACV,cAAc;IACd,QAAQ;IACR,iBAAiB;IACjB,UAAU;CACX,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAS,qBAAqB,CAAC,CAAC;AAEzD;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAqB9C,MAAM,UAAU,oBAAoB,CAAC,KAAgB;IACnD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAE1E,MAAM,KAAK,GAAG,CAAC,QAAiC,EAAW,EAAE,CAC3D,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAExC,0DAA0D;IAC1D,MAAM,IAAI,GAAG,CAAC,QAAiC,EAAW,EAAE;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACtC,IAAI,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7C,IAAI,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,IAAI,CACX,SAAS,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,6BAA6B;gBAC5D,2BAA2B;gBAC3B,6CAA6C,CAChD,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QACD,sDAAsD;QACtD,6BAA6B;QAC7B,EAAE;QACF,qCAAqC;QACrC,qCAAqC;QACrC,8BAA8B;QAC9B,oCAAoC;QACpC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CACX,SAAS,KAAK,CAAC,QAAQ,CAAC,aAAa;gBACnC,yCAAyC;gBACzC,2CAA2C,CAC9C,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,6CAA6C;IAC7C,gCAAgC;IAChC,MAAM,OAAO,GAA4D,EAAE,CAAC;IAC5E,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,UAAU,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,2CAA2C;QAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACzF,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAsB,CAAC;QAChE,KAAK,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE;QAChC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACtD,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAA4B;QACpC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB;;;;;;WAMG;QACH,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAClD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,IAAI,KAAK,KAAK,SAAS;gBAAE,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,KAAK,SAAS;gBAAE,KAAK,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;YACpD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;KACH,CAAC;IAEF,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnC,+CAA+C;IAC/C,+BAA+B;IAC/B,uCAAuC;IACvC,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;QACvC,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,QAAQ,CAAC,IAAI,CACX,yCAAyC;gBACvC,gDAAgD,CACnD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;YAC5B,0CAA0C;YAC1C,kCAAkC;YAClC,IAAI,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAClF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;IAE5C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,IAAI;QAAE,IAAI,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;IAEnD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED,mCAAmC;AACnC,SAAS,oBAAoB,CAAC,MAA0C;IACtE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,IAAI,GAAG,CAAC,IAAwC,EAAQ,EAAE;QAC9D,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,MAA6B,EAAE,CAAC;oBAClD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;wBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,IAAI,CAAC,MAAmC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CACzB,MAA0C,EAC1C,UAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3C,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,OAAO;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACvC,6CAA6C;QAC7C,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,iBAAiB;YAAE,SAAS;QAExD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzF,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,SAAS;QACrC,KAAK,MAAM,KAAK,IAAI,iBAAiB,CAAC,MAAmC,CAAC,EAAE,CAAC;YAC3E,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mCAAmC;AACnC,SAAS,iBAAiB,CAAC,IAAwC;IACjE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,MAA6B,EAAE,CAAC;gBAClD,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;oBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAmC,CAAC,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,QAAiC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAuB,CAAC;IAC5D,MAAM,KAAK,GAA4B;QACrC,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC/B,CAAC;IAEF,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACpD,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAElD,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,SAAS,CAAC,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;YAC5D,KAAK,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QACvC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClE,KAAK,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;QACvC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB;YACrB,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YACzD,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YACzD,MAAM;QACR,KAAK,iBAAiB,CAAC;QACvB,KAAK,WAAW;YACd,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,MAAM;QACR,KAAK,QAAQ;YACX,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YACpD,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YACpD,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9C,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5C,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,MAAM;QACR,KAAK,MAAM;YACT,KAAK,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC/D,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5C,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAChE,MAAM;QACR,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,UAAU;YACb,UAAU,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAClE,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,MAAM;QACR,KAAK,MAAM;YACT,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YACpD,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC5D,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;YACzD,MAAM;QACR,KAAK,aAAa,CAAC;QACnB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,cAAc;YACjB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;YACrD,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC;YAC7D,MAAM;QACR,KAAK,MAAM;YACT,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9D,MAAM;IACV,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,0DAA0D;AAC1D,SAAS,mBAAmB,CAAC,OAAgC;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;SAC1B,MAAM,CAAC,QAAQ,CAAC;SAChB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAClB,KAA8C,EAC9C,QAAkB;IAElB,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;SACxB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAClC,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QACxD,QAAQ,CAAC,IAAI,CACX,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,6BAA6B,CACzD,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;SACjE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SAC3B,CAAC;QACF,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QACnD,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IAClC,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEpC,IAAI,KAAK,CAAC,UAAU,EAAE,aAAa,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACxF,QAAQ,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;IACrD,CAAC;IACD,KAAK,MAAM,GAAG,IAAI;QAChB,gBAAgB;QAChB,kBAAkB;QAClB,oBAAoB;QACpB,uBAAuB;QACvB,2BAA2B;KAC5B,EAAE,CAAC;QACF,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACjD,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACpD,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,QAAQ,CAAC,wBAAwB,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,MAAM,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IAC1E,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACjF,CAAC;AAED,6CAA6C;AAC7C,SAAS,UAAU,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IAC9E,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACrE,CAAC;AAED,+CAA+C;AAC/C,SAAS,aAAa,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IACjF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;AACpD,CAAC;AAED,SAAS,UAAU,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IAC9E,IAAI,KAAK,KAAK,IAAI;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,MAA+B,EAAE,GAAW,EAAE,KAAc;IAC/E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACpE,CAAC"}
|
package/dist/spec/layout.js
CHANGED
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* フォームレイアウトの組み立て。
|
|
3
|
-
*
|
|
4
|
-
* kintone にフィールドを追加すると、既定では 1 行に 1 つずつ縦に並ぶ。
|
|
5
|
-
* 似た性質のフィールドを横に並べたほうが、記入する人にとって見通しが良い。
|
|
6
|
-
*
|
|
7
|
-
* まとめ方の基準は 2 段構え。
|
|
8
|
-
* 1. フィールドに `group` (「書誌情報」「貸出」など意味のまとまり) があればそれを使う
|
|
9
|
-
* 2. 無ければフィールド型の系統で代用する
|
|
10
|
-
*
|
|
11
|
-
* `group` は意味の判断が要るので、`plan` / `create` ではモデルが付ける。
|
|
12
|
-
* デプロイ層は付いた結果を使うだけで、判断はしない。
|
|
13
|
-
*
|
|
14
|
-
* どちらの場合も **並び順は変えない**ので、AppSpec に書いた順序の意図は保たれる。
|
|
15
|
-
*/
|
|
1
|
+
import { deriveFieldCode } from "./fieldSpec.js";
|
|
16
2
|
/**
|
|
17
3
|
* フィールドの系統。同じ系統どうしだけを横に並べる。
|
|
18
4
|
* ここに無い型 (複数行テキスト、リッチエディター、添付ファイルなど) は
|
|
@@ -95,16 +81,19 @@ export function groupIntoRows(fields, options = {}) {
|
|
|
95
81
|
/**
|
|
96
82
|
* kintone から取得した既存のレイアウトを並べ替える。
|
|
97
83
|
*
|
|
98
|
-
* GROUP と SUBTABLE の行はそのまま残す (中身の構造が別なので触らない)。
|
|
84
|
+
* 既定では GROUP と SUBTABLE の行はそのまま残す (中身の構造が別なので触らない)。
|
|
99
85
|
* 連続する ROW だけをいったん平らにして、系統ごとにまとめ直す。
|
|
86
|
+
*
|
|
87
|
+
* `sections` を指定した場合は GROUP も fieldsmith が組み立てる対象になるので、
|
|
88
|
+
* 中身を取り出したうえで `group` に従って作り直す。
|
|
100
89
|
*/
|
|
101
90
|
export function regroupLayout(layout, options = {}) {
|
|
91
|
+
if (options.sections === true)
|
|
92
|
+
return resectionLayout(layout, options);
|
|
102
93
|
const result = [];
|
|
103
94
|
let pending = [];
|
|
104
95
|
const flushPending = () => {
|
|
105
|
-
|
|
106
|
-
result.push({ type: "ROW", fields: row });
|
|
107
|
-
}
|
|
96
|
+
result.push(...buildFormRows(pending, options));
|
|
108
97
|
pending = [];
|
|
109
98
|
};
|
|
110
99
|
for (const row of layout) {
|
|
@@ -115,20 +104,209 @@ export function regroupLayout(layout, options = {}) {
|
|
|
115
104
|
}
|
|
116
105
|
continue;
|
|
117
106
|
}
|
|
118
|
-
//
|
|
107
|
+
// AppSpec が知っているテーブルだけ、列を取り出して元の位置で作り直す。
|
|
108
|
+
if (row.type === "SUBTABLE" && isManagedTable(row, options.tables)) {
|
|
109
|
+
pending.push(...subtableColumns(row));
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// GROUP と、知らないテーブルの前後で行の連続は途切れる。
|
|
119
113
|
flushPending();
|
|
120
114
|
result.push(row);
|
|
121
115
|
}
|
|
122
116
|
flushPending();
|
|
123
117
|
return result;
|
|
124
118
|
}
|
|
119
|
+
/** SUBTABLE の行が抱えている列。kintone のレイアウトでは平らな配列で入っている。 */
|
|
120
|
+
function subtableColumns(row) {
|
|
121
|
+
const fields = row.fields;
|
|
122
|
+
return Array.isArray(fields) ? fields : [];
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* そのテーブルを fieldsmith が組み立て直してよいか。
|
|
126
|
+
*
|
|
127
|
+
* **AppSpec が知らないテーブルには触らない。** 解いてしまうと列が素の行に出てしまい、
|
|
128
|
+
* レイアウト変更 API に弾かれる。`table` を書いていない spec で更新したときに
|
|
129
|
+
* 既存のテーブルを壊さないための歯止め。
|
|
130
|
+
*/
|
|
131
|
+
function isManagedTable(row, tables) {
|
|
132
|
+
const columns = subtableColumns(row);
|
|
133
|
+
if (columns.length === 0 || tables === undefined)
|
|
134
|
+
return false;
|
|
135
|
+
return columns.every((column) => nameOf(tables[column.code]) !== undefined);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* セクション指定でレイアウトを組み直す。
|
|
139
|
+
*
|
|
140
|
+
* 既存の GROUP は**中身を取り出してから捨てる**。
|
|
141
|
+
* グループフィールドそのものは properties に残るので、
|
|
142
|
+
* 目標に無くなったセクションは空のまま末尾に置き直す (勝手に消さない)。
|
|
143
|
+
*/
|
|
144
|
+
function resectionLayout(layout, options) {
|
|
145
|
+
const fields = [];
|
|
146
|
+
const emptied = [];
|
|
147
|
+
const others = [];
|
|
148
|
+
for (const row of layout) {
|
|
149
|
+
if (row.type === "ROW") {
|
|
150
|
+
const own = row.fields;
|
|
151
|
+
if (Array.isArray(own))
|
|
152
|
+
fields.push(...own);
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
if (row.type === "GROUP") {
|
|
156
|
+
fields.push(...collectLayoutFields((row.layout ?? [])));
|
|
157
|
+
emptied.push(row);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (row.type === "SUBTABLE" && isManagedTable(row, options.tables)) {
|
|
161
|
+
fields.push(...subtableColumns(row));
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
others.push(row);
|
|
165
|
+
}
|
|
166
|
+
const managed = sectionCodesOf(fields, options.groups);
|
|
167
|
+
const leftovers = emptied
|
|
168
|
+
.filter((row) => !managed.has(String(row.code)))
|
|
169
|
+
.map((row) => ({ ...row, type: "GROUP", layout: [] }));
|
|
170
|
+
return [...buildFormRows(fields, { ...options, sections: true }), ...others, ...leftovers];
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* group の値から、グループフィールドのフィールドコードを導く。
|
|
174
|
+
*
|
|
175
|
+
* ラベルからコードを導くのと同じ規則を使う。**毎回同じ結果になること**が肝で、
|
|
176
|
+
* これによって update を繰り返してもグループが増えない
|
|
177
|
+
* (`_削除候補` を固定コードにしているのと同じ理由)。
|
|
178
|
+
*/
|
|
179
|
+
export function sectionCodeOf(name) {
|
|
180
|
+
return deriveFieldCode(name);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* table の値から、テーブルのフィールドコードを導く。
|
|
184
|
+
*
|
|
185
|
+
* セクションと同じく、同じ名前からは毎回同じコードが出ることが要。
|
|
186
|
+
* @see sectionCodeOf
|
|
187
|
+
*/
|
|
188
|
+
export function tableCodeOf(name) {
|
|
189
|
+
return deriveFieldCode(name);
|
|
190
|
+
}
|
|
191
|
+
/** 目標の並びから、テーブルのフィールドコードを集める。 */
|
|
192
|
+
export function tableCodesOf(fields, tables = {}) {
|
|
193
|
+
const codes = new Set();
|
|
194
|
+
for (const field of fields) {
|
|
195
|
+
const name = tables[field.code];
|
|
196
|
+
if (name !== undefined && name !== "")
|
|
197
|
+
codes.add(tableCodeOf(name));
|
|
198
|
+
}
|
|
199
|
+
return codes;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* フィールドの並びを、テーブル・セクション・行に組み立てる。
|
|
203
|
+
*
|
|
204
|
+
* 同じ `table` の連なりは 1 つの SUBTABLE に、同じ `group` の連なりは
|
|
205
|
+
* (`sections` のとき) 1 つの GROUP になる。どちらでもないものは行に並べる。
|
|
206
|
+
*
|
|
207
|
+
* テーブルは行の概念を持たないので、列は平らな配列として並べる
|
|
208
|
+
* (kintone のレイアウトで SUBTABLE が `layout` ではなく `fields` を持つのと同じ)。
|
|
209
|
+
*
|
|
210
|
+
* 並び順は変えない。`group` / `table` が離れて書かれていないことは AppSpec の検証で保証済み。
|
|
211
|
+
*/
|
|
212
|
+
export function buildFormRows(fields, options = {}) {
|
|
213
|
+
const groups = options.groups ?? {};
|
|
214
|
+
const tables = options.tables ?? {};
|
|
215
|
+
const result = [];
|
|
216
|
+
let run = [];
|
|
217
|
+
let runKey;
|
|
218
|
+
let runTable;
|
|
219
|
+
let runGroup;
|
|
220
|
+
const flush = () => {
|
|
221
|
+
if (run.length === 0)
|
|
222
|
+
return;
|
|
223
|
+
if (runTable !== undefined) {
|
|
224
|
+
result.push({ type: "SUBTABLE", code: tableCodeOf(runTable), fields: [...run] });
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const rows = groupIntoRows(run, options).map((fields) => ({ type: "ROW", fields }));
|
|
228
|
+
if (runGroup === undefined)
|
|
229
|
+
result.push(...rows);
|
|
230
|
+
else
|
|
231
|
+
result.push({ type: "GROUP", code: sectionCodeOf(runGroup), layout: rows });
|
|
232
|
+
}
|
|
233
|
+
run = [];
|
|
234
|
+
};
|
|
235
|
+
for (const field of fields) {
|
|
236
|
+
const table = nameOf(tables[field.code]);
|
|
237
|
+
const group = options.sections === true ? nameOf(groups[field.code]) : undefined;
|
|
238
|
+
// テーブルとセクションは同時に付かない (AppSpec の検証で弾いている)。
|
|
239
|
+
const key = table === undefined ? (group === undefined ? undefined : `g:${group}`) : `t:${table}`;
|
|
240
|
+
if (key !== runKey) {
|
|
241
|
+
flush();
|
|
242
|
+
runKey = key;
|
|
243
|
+
runTable = table;
|
|
244
|
+
runGroup = group;
|
|
245
|
+
}
|
|
246
|
+
run.push(field);
|
|
247
|
+
}
|
|
248
|
+
flush();
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
function nameOf(value) {
|
|
252
|
+
return value === undefined || value === "" ? undefined : value;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* フィールドの並びを、セクション (グループフィールド) と行に組み立てる。
|
|
256
|
+
*
|
|
257
|
+
* `group` が同じフィールドの連なりが 1 つのセクションになる。
|
|
258
|
+
* `group` の無いフィールドは、これまで通り素の行として置く。
|
|
259
|
+
* セクションの中でも、系統ごとに最大 maxPerRow 個までを横に並べる。
|
|
260
|
+
*
|
|
261
|
+
* 並び順は変えない。`group` が離れて書かれていないことは AppSpec の検証で保証済み。
|
|
262
|
+
*/
|
|
263
|
+
export function buildSectionedRows(fields, options = {}) {
|
|
264
|
+
return buildFormRows(fields, { ...options, sections: true });
|
|
265
|
+
}
|
|
266
|
+
/** 目標の並びから、fieldsmith が面倒を見るセクションのフィールドコードを集める。 */
|
|
267
|
+
export function sectionCodesOf(fields, groups = {}) {
|
|
268
|
+
const codes = new Set();
|
|
269
|
+
for (const field of fields) {
|
|
270
|
+
const name = groups[field.code];
|
|
271
|
+
if (name !== undefined && name !== "")
|
|
272
|
+
codes.add(sectionCodeOf(name));
|
|
273
|
+
}
|
|
274
|
+
return codes;
|
|
275
|
+
}
|
|
125
276
|
/** 並べ替えの結果を人が読める形にする (--dry-run と進捗表示で使う)。 */
|
|
126
277
|
export function describeRows(rows) {
|
|
127
278
|
return rows.map((row) => row.map((field) => field.code).join(" | "));
|
|
128
279
|
}
|
|
280
|
+
/** 組み上がったレイアウトを、入れ子も含めて人が読める形にする。 */
|
|
281
|
+
export function describeLayout(rows, indent = "") {
|
|
282
|
+
const lines = [];
|
|
283
|
+
for (const row of rows) {
|
|
284
|
+
if (row.type === "ROW") {
|
|
285
|
+
const fields = (row.fields ?? []).map((f) => f.code);
|
|
286
|
+
lines.push(`${indent}${fields.join(" | ")}`);
|
|
287
|
+
continue;
|
|
288
|
+
}
|
|
289
|
+
const code = row.code ?? row.type;
|
|
290
|
+
// テーブルは行を持たず、列が平らに入っている。GROUP と同じ形に見えるが中身が違う。
|
|
291
|
+
if (row.type === "SUBTABLE") {
|
|
292
|
+
lines.push(`${indent}▦ ${code} (テーブル)`);
|
|
293
|
+
const columns = (row.fields ?? []).map((f) => f.code);
|
|
294
|
+
if (columns.length > 0)
|
|
295
|
+
lines.push(`${indent} ${columns.join(" | ")}`);
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
lines.push(`${indent}▼ ${code}`);
|
|
299
|
+
lines.push(...describeLayout((row.layout ?? []), `${indent} `));
|
|
300
|
+
}
|
|
301
|
+
return lines;
|
|
302
|
+
}
|
|
129
303
|
/**
|
|
130
304
|
* 削除候補グループのフィールドコード。
|
|
131
305
|
* 毎回同じコードを使うことで、更新を繰り返してもグループが増えない。
|
|
306
|
+
*
|
|
307
|
+
* **先頭の `_` には意味がある。** `deriveFieldCode` は前後の `_` を落とすので、
|
|
308
|
+
* `sectionCodeOf` がこのコードを返すことはない。
|
|
309
|
+
* つまり利用者が付けた `group` が、退避先と衝突することはない。
|
|
132
310
|
*/
|
|
133
311
|
export const ORPHAN_GROUP_CODE = "_削除候補";
|
|
134
312
|
export const ORPHAN_GROUP_LABEL = "削除候補";
|
|
@@ -147,16 +325,30 @@ function withoutFields(layout, remove) {
|
|
|
147
325
|
result.push({ ...row, type: "GROUP", layout: nested });
|
|
148
326
|
continue;
|
|
149
327
|
}
|
|
328
|
+
if (row.type === "SUBTABLE") {
|
|
329
|
+
const columns = subtableColumns(row);
|
|
330
|
+
const fields = columns.filter((field) => !remove.has(field.code));
|
|
331
|
+
// 全部の列を抜いたときだけ行ごと落とす。
|
|
332
|
+
// もともと空だったものは、こちらの都合で消さずそのまま残す。
|
|
333
|
+
if (fields.length > 0 || columns.length === 0) {
|
|
334
|
+
result.push({ ...row, type: "SUBTABLE", fields });
|
|
335
|
+
}
|
|
336
|
+
continue;
|
|
337
|
+
}
|
|
150
338
|
result.push(row);
|
|
151
339
|
}
|
|
152
340
|
return result;
|
|
153
341
|
}
|
|
154
|
-
/**
|
|
342
|
+
/**
|
|
343
|
+
* レイアウトに載っているフィールドを、入れ子も含めて集める。
|
|
344
|
+
* テーブルの列も数える。レイアウト変更 API は**フォーム上のすべてのフィールド**を
|
|
345
|
+
* 求めるので、ここで取りこぼすと「1 つ足りない」で失敗する。
|
|
346
|
+
*/
|
|
155
347
|
export function collectLayoutFields(layout) {
|
|
156
348
|
const fields = [];
|
|
157
349
|
for (const row of layout) {
|
|
158
350
|
const own = row.fields;
|
|
159
|
-
if (row.type === "ROW" && Array.isArray(own))
|
|
351
|
+
if ((row.type === "ROW" || row.type === "SUBTABLE") && Array.isArray(own))
|
|
160
352
|
fields.push(...own);
|
|
161
353
|
const nested = row.layout;
|
|
162
354
|
if (Array.isArray(nested))
|
|
@@ -164,6 +356,105 @@ export function collectLayoutFields(layout) {
|
|
|
164
356
|
}
|
|
165
357
|
return fields;
|
|
166
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* 目標の並びでレイアウトを組み直す。**AppSpec に現れないものは位置ごと保つ。**
|
|
361
|
+
*
|
|
362
|
+
* 組み直しは `desired` を起点にするので、そこに居ないものは何もしないと消える。
|
|
363
|
+
* レイアウト変更 API はフォーム上のすべてのフィールドを求めるため、
|
|
364
|
+
* 落とすと更新そのものが失敗する。飾りは API が求めないぶん、
|
|
365
|
+
* 黙って消えてしまう分だけ質が悪い。
|
|
366
|
+
*/
|
|
367
|
+
function rebuildPreserving(base, placed, options) {
|
|
368
|
+
const managed = new Set(placed.map((field) => field.code));
|
|
369
|
+
const sections = options.sections === true;
|
|
370
|
+
const wantedSections = sections ? sectionCodesOf(placed, options.groups) : new Set();
|
|
371
|
+
const preserved = [];
|
|
372
|
+
let anchor;
|
|
373
|
+
/** その行を解いて組み直すか。解かないものはまるごと保つ。 */
|
|
374
|
+
const keepWhole = (row) => {
|
|
375
|
+
if (row.type === "ROW")
|
|
376
|
+
return false;
|
|
377
|
+
if (row.type === "GROUP")
|
|
378
|
+
return !sections;
|
|
379
|
+
if (row.type === "SUBTABLE")
|
|
380
|
+
return !isManagedTable(row, options.tables);
|
|
381
|
+
return true;
|
|
382
|
+
};
|
|
383
|
+
/** 位置の手掛かりを、その行に含まれるフィールドまで進める。 */
|
|
384
|
+
const advance = (row) => {
|
|
385
|
+
for (const field of collectLayoutFields([row])) {
|
|
386
|
+
if (managed.has(field.code))
|
|
387
|
+
anchor = field.code;
|
|
388
|
+
}
|
|
389
|
+
};
|
|
390
|
+
for (const row of base) {
|
|
391
|
+
if (keepWhole(row)) {
|
|
392
|
+
preserved.push({ after: anchor, row });
|
|
393
|
+
advance(row);
|
|
394
|
+
continue;
|
|
395
|
+
}
|
|
396
|
+
if (row.type !== "ROW") {
|
|
397
|
+
// 解く GROUP / テーブル。中身は placed に含まれているので位置だけ進める。
|
|
398
|
+
advance(row);
|
|
399
|
+
// 目標から消えたセクションは、空のまま残す。
|
|
400
|
+
// グループフィールドは properties に在り、レイアウトから外すと行き場が無い。
|
|
401
|
+
if (row.type === "GROUP" && !wantedSections.has(String(row.code))) {
|
|
402
|
+
preserved.push({
|
|
403
|
+
after: anchor,
|
|
404
|
+
row: { ...row, type: "GROUP", layout: [] },
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
continue;
|
|
408
|
+
}
|
|
409
|
+
// 1 つの行に、組み直すフィールドと保つ要素が混ざっていることがある。
|
|
410
|
+
let pending = [];
|
|
411
|
+
let pendingAfter = anchor;
|
|
412
|
+
const flush = () => {
|
|
413
|
+
if (pending.length === 0)
|
|
414
|
+
return;
|
|
415
|
+
preserved.push({ after: pendingAfter, row: { type: "ROW", fields: pending } });
|
|
416
|
+
pending = [];
|
|
417
|
+
};
|
|
418
|
+
for (const item of row.fields ?? []) {
|
|
419
|
+
if (typeof item.code === "string" && managed.has(item.code)) {
|
|
420
|
+
flush();
|
|
421
|
+
anchor = item.code;
|
|
422
|
+
pendingAfter = anchor;
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
pending.push(item);
|
|
426
|
+
}
|
|
427
|
+
flush();
|
|
428
|
+
}
|
|
429
|
+
const held = new Map();
|
|
430
|
+
for (const entry of preserved) {
|
|
431
|
+
const rows = held.get(entry.after);
|
|
432
|
+
if (rows === undefined)
|
|
433
|
+
held.set(entry.after, [entry.row]);
|
|
434
|
+
else
|
|
435
|
+
rows.push(entry.row);
|
|
436
|
+
}
|
|
437
|
+
const result = [];
|
|
438
|
+
const take = (key) => {
|
|
439
|
+
const rows = held.get(key);
|
|
440
|
+
if (rows === undefined)
|
|
441
|
+
return;
|
|
442
|
+
result.push(...rows);
|
|
443
|
+
held.delete(key);
|
|
444
|
+
};
|
|
445
|
+
take(undefined);
|
|
446
|
+
for (const row of buildFormRows(placed, options)) {
|
|
447
|
+
result.push(row);
|
|
448
|
+
for (const field of collectLayoutFields([row])) {
|
|
449
|
+
if (typeof field.code === "string")
|
|
450
|
+
take(field.code);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
// 手掛かりのフィールドごと消えたものは末尾へ。位置は諦めても、捨てはしない。
|
|
454
|
+
for (const rows of held.values())
|
|
455
|
+
result.push(...rows);
|
|
456
|
+
return result;
|
|
457
|
+
}
|
|
167
458
|
/**
|
|
168
459
|
* 更新後のフォームレイアウトを組み立てる。
|
|
169
460
|
*
|
|
@@ -187,20 +478,32 @@ export function buildUpdatedLayout(input) {
|
|
|
187
478
|
// 削除候補グループと、そこへ入るもの・戻るものを、いったん全部どかす。
|
|
188
479
|
const removed = new Set([...orphans, ...parked.map((field) => field.code)]);
|
|
189
480
|
let base = withoutFields(input.current.filter((row) => !(row.type === "GROUP" && row.code === ORPHAN_GROUP_CODE)), removed);
|
|
481
|
+
const groupOptions = {
|
|
482
|
+
...(input.maxPerRow === undefined ? {} : { maxPerRow: input.maxPerRow }),
|
|
483
|
+
...(input.groups === undefined ? {} : { groups: input.groups }),
|
|
484
|
+
...(input.tables === undefined ? {} : { tables: input.tables }),
|
|
485
|
+
};
|
|
486
|
+
const placed = input.desired.filter((field) => !orphans.has(field.code));
|
|
190
487
|
if (input.regroup) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
...(input.groups === undefined ? {} : { groups: input.groups }),
|
|
196
|
-
}).map((row) => ({ type: "ROW", fields: row }));
|
|
197
|
-
base = [...rows, ...others];
|
|
488
|
+
base = rebuildPreserving(base, placed, {
|
|
489
|
+
...groupOptions,
|
|
490
|
+
...(input.sections === true ? { sections: true } : {}),
|
|
491
|
+
});
|
|
198
492
|
}
|
|
199
493
|
else {
|
|
200
494
|
// 手を触れない場合でも、戻ってきたフィールドは行として足す必要がある。
|
|
201
495
|
base = [...base, ...revived.map((field) => ({ type: "ROW", fields: [field] }))];
|
|
202
496
|
}
|
|
203
|
-
|
|
497
|
+
// 既に退避してあって目標にも戻っていないものは、退避したままにする。
|
|
498
|
+
// orphans には入ってこない (もう動かす必要が無いので) が、
|
|
499
|
+
// レイアウト変更 API はフォーム上のすべてのフィールドを求めるため、
|
|
500
|
+
// ここで入れ直さないとレイアウトから消えてしまう。
|
|
501
|
+
const revivedCodes = new Set(revived.map((field) => field.code));
|
|
502
|
+
const stillParked = parked.filter((field) => !revivedCodes.has(field.code));
|
|
503
|
+
const parkedNow = [
|
|
504
|
+
...stillParked,
|
|
505
|
+
...[...orphans].map((code) => known.get(code) ?? { code, type: "SINGLE_LINE_TEXT" }),
|
|
506
|
+
];
|
|
204
507
|
if (parkedNow.length === 0)
|
|
205
508
|
return base;
|
|
206
509
|
return [
|