@takagaki/cortex-decisions-viewer 0.12.137 → 0.12.138
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/pending-ops.js +35 -2
- package/dist/render.js +2 -1
- package/package.json +1 -1
package/dist/pending-ops.js
CHANGED
|
@@ -22,6 +22,7 @@ exports.PENDING_OPS_LIMITS = void 0;
|
|
|
22
22
|
exports.pendingKindsTable = pendingKindsTable;
|
|
23
23
|
exports.pendingOpsKey = pendingOpsKey;
|
|
24
24
|
exports.pendingSlackChannelId = pendingSlackChannelId;
|
|
25
|
+
exports.pendingSlackUrl = pendingSlackUrl;
|
|
25
26
|
exports.pendingIsSpaceRef = pendingIsSpaceRef;
|
|
26
27
|
exports.pendingGoogleChatSpaceRef = pendingGoogleChatSpaceRef;
|
|
27
28
|
exports.pendingRepo = pendingRepo;
|
|
@@ -115,6 +116,18 @@ function pendingSlackChannelId(input) {
|
|
|
115
116
|
const client = s.match(/^https?:\/\/app\.slack\.com\/client\/[TE][A-Z0-9]{6,20}\/([CG][A-Z0-9]{6,})/);
|
|
116
117
|
return client ? client[1] : null;
|
|
117
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Slack のチャンネル URL(リンク用)。貼られた URL が `<ドメイン>.slack.com/archives/<ID>` で、ID が
|
|
121
|
+
* 対象のチャンネルと同じならそれを正規化して返す。取れなければ `https://slack.com/archives/<ID>`
|
|
122
|
+
* (夜のまとめ=サーバの logic.mjs と同じ形)。**夜のまとめの `url` が来たらそちらが正**で、これは仮置き用。
|
|
123
|
+
*/
|
|
124
|
+
function pendingSlackUrl(input, id) {
|
|
125
|
+
const cid = String(id == null ? "" : id);
|
|
126
|
+
const m = String(input == null ? "" : input).trim().match(/^https:\/\/([a-z0-9][a-z0-9-]*)\.slack\.com\/archives\/([CG][A-Z0-9]{6,})(?:[/?#]|$)/);
|
|
127
|
+
if (m && m[2] === cid && m[1] !== "app")
|
|
128
|
+
return "https://" + m[1] + ".slack.com/archives/" + cid;
|
|
129
|
+
return cid ? "https://slack.com/archives/" + cid : "";
|
|
130
|
+
}
|
|
118
131
|
/**
|
|
119
132
|
* スペース ref の形(サーバの `GOOGLE_CHAT_SPACE_REF` の写し)。ずれは parity テストが固定する。
|
|
120
133
|
*
|
|
@@ -269,6 +282,9 @@ function pendingOpOf(payload, ctx) {
|
|
|
269
282
|
case "add-channel": {
|
|
270
283
|
const id = pendingSlackChannelId(payload.url);
|
|
271
284
|
const data = { name: pendingLabel(payload.name) || id };
|
|
285
|
+
// 貼られた URL でリンクにする(追加直後・接続を確認する前から)。ドメインが取れなければ共通の形
|
|
286
|
+
if (id)
|
|
287
|
+
data.url = pendingSlackUrl(payload.url, id);
|
|
272
288
|
if (payload.workspace)
|
|
273
289
|
data.workspace = String(payload.workspace);
|
|
274
290
|
// **どの組織のチャンネルかは、サーバの実測を応答から受け取る(#391)。**
|
|
@@ -286,7 +302,14 @@ function pendingOpOf(payload, ctx) {
|
|
|
286
302
|
return make("slack", "remove", payload.ref);
|
|
287
303
|
case "refresh-channel-name": {
|
|
288
304
|
const name = pendingLabel(payload.name);
|
|
289
|
-
|
|
305
|
+
if (!name)
|
|
306
|
+
return null;
|
|
307
|
+
// 接続を確認できた行は、チャンネルの URL も揃える(行に url が無いときだけ効く・合成の項)
|
|
308
|
+
const data = { name: name };
|
|
309
|
+
const url = pendingSlackUrl(payload.url, payload.ref);
|
|
310
|
+
if (url)
|
|
311
|
+
data.url = url;
|
|
312
|
+
return make("slack", "update", payload.ref, data);
|
|
290
313
|
}
|
|
291
314
|
case "set-notify": {
|
|
292
315
|
if (typeof payload.value !== "boolean")
|
|
@@ -370,7 +393,7 @@ function sanitizePendingOps(raw, projectKey) {
|
|
|
370
393
|
const src = e.payload && typeof e.payload === "object" ? e.payload : {};
|
|
371
394
|
// 通してよい payload の欄(葉は文字列か、notify だけ真偽値)。関数の中に置くのは、
|
|
372
395
|
// クライアントへ toString() で流し込んだ先でも同じ一覧を参照できるようにするため
|
|
373
|
-
const fields = ["name", "workspace", "notify", "domain", "projectKey", "type", "slackOrg"];
|
|
396
|
+
const fields = ["name", "workspace", "notify", "domain", "projectKey", "type", "slackOrg", "url"];
|
|
374
397
|
for (const f of fields) {
|
|
375
398
|
if (!Object.prototype.hasOwnProperty.call(src, f))
|
|
376
399
|
continue;
|
|
@@ -378,6 +401,11 @@ function sanitizePendingOps(raw, projectKey) {
|
|
|
378
401
|
if (src[f] === true || src[f] === false)
|
|
379
402
|
payload[f] = src[f];
|
|
380
403
|
}
|
|
404
|
+
else if (f === "url") {
|
|
405
|
+
// href に入る値。localStorage から読み戻すので、Slack のチャンネル URL の形だけ通す
|
|
406
|
+
if (typeof src[f] === "string" && /^https:\/\/(?:[a-z0-9][a-z0-9-]*\.)?slack\.com\/archives\/[CG][A-Z0-9]{6,}$/.test(src[f]))
|
|
407
|
+
payload[f] = src[f];
|
|
408
|
+
}
|
|
381
409
|
else if (typeof src[f] === "string")
|
|
382
410
|
payload[f] = src[f];
|
|
383
411
|
}
|
|
@@ -735,6 +763,8 @@ function pendingExternalRow(e) {
|
|
|
735
763
|
row.type = "slack";
|
|
736
764
|
row.name = p.name || e.targetId;
|
|
737
765
|
row.ref = e.targetId;
|
|
766
|
+
if (typeof p.url === "string" && p.url)
|
|
767
|
+
row.url = p.url;
|
|
738
768
|
// channels.json に書いた行= derived(dev-sources 側の宣言ではない)
|
|
739
769
|
row.origin = "derived";
|
|
740
770
|
if (p.workspace)
|
|
@@ -859,6 +889,9 @@ function applyPendingOps(view, list) {
|
|
|
859
889
|
const patch = {};
|
|
860
890
|
if (e.kind === "slack" && typeof p.name === "string" && p.name)
|
|
861
891
|
patch.name = p.name;
|
|
892
|
+
// 夜のまとめの url が正。無い行にだけ仮置きの url を足す
|
|
893
|
+
if (e.kind === "slack" && typeof p.url === "string" && p.url && !externals[idx].url)
|
|
894
|
+
patch.url = p.url;
|
|
862
895
|
if (typeof p.notify === "boolean")
|
|
863
896
|
patch.notify = p.notify;
|
|
864
897
|
externals[idx] = Object.assign({}, externals[idx], patch);
|
package/dist/render.js
CHANGED
|
@@ -6388,6 +6388,7 @@ var PENDING_OPS_SETTLE_MS = ${JSON.stringify(pending_ops_1.PENDING_OPS_LIMITS.se
|
|
|
6388
6388
|
var PENDING_KINDS = ${JSON.stringify((0, pending_ops_1.pendingKindsTable)())};
|
|
6389
6389
|
${pending_ops_1.pendingOpsKey.toString()}
|
|
6390
6390
|
${pending_ops_1.pendingSlackChannelId.toString()}
|
|
6391
|
+
${pending_ops_1.pendingSlackUrl.toString()}
|
|
6391
6392
|
${pending_ops_1.pendingGoogleChatSpaceRef.toString()}
|
|
6392
6393
|
${pending_ops_1.pendingRepo.toString()}
|
|
6393
6394
|
${pending_ops_1.pendingFigmaKey.toString()}
|
|
@@ -14187,7 +14188,7 @@ ${calendarAddUrl.toString()}
|
|
|
14187
14188
|
callIntake("config", payload).then(function (res) {
|
|
14188
14189
|
if (!res.ok) return;
|
|
14189
14190
|
// 仮置き(#388): リロードしても新しい名前で出る。送っていない name を判定用に添える
|
|
14190
|
-
notePendingOp({ op: "refresh-channel-name", ref: s.ref, name: r.name });
|
|
14191
|
+
notePendingOp({ op: "refresh-channel-name", ref: s.ref, name: r.name, url: s.url || "" });
|
|
14191
14192
|
// 一覧は夜間のスナップショットなので、その場では変わらない。行だけ追いつかせる
|
|
14192
14193
|
var nameEl = card.querySelector(".ds-name");
|
|
14193
14194
|
if (nameEl) nameEl.textContent = slackDisplayName(r.name);
|
package/package.json
CHANGED