@saasicat/ui-vue 0.7.0 → 0.9.0
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/{chunk-A3W2N26K.js → chunk-66BUSVC5.js} +68 -217
- package/dist/{chunk-X5SQ5HMB.js → chunk-TBLXKSTR.js} +0 -137
- package/dist/{chunk-QZOSDCNP.js → chunk-TY2WYKME.js} +1 -1
- package/dist/client/index.cjs +180 -463
- package/dist/client/index.d.cts +32 -57
- package/dist/client/index.d.ts +32 -57
- package/dist/client/index.js +4 -6
- package/dist/index.cjs +273 -580
- package/dist/index.d.cts +10 -55
- package/dist/index.d.ts +10 -55
- package/dist/index.js +76 -101
- package/dist/{messages-7b0P8W75.d.ts → messages-BIYw32u1.d.cts} +0 -67
- package/dist/{messages-7b0P8W75.d.cts → messages-BIYw32u1.d.ts} +0 -67
- package/dist/quasar/index.cjs +0 -136
- package/dist/quasar/index.d.cts +2 -2
- package/dist/quasar/index.d.ts +2 -2
- package/dist/quasar/index.js +2 -2
- package/dist/{use-super-admin-i18n-B3v3-SWZ.d.ts → use-super-admin-i18n-CWNu_W3u.d.ts} +1 -1
- package/dist/{use-super-admin-i18n-DMktRVEt.d.cts → use-super-admin-i18n-DL_qI1BY.d.cts} +1 -1
- package/package.json +5 -5
- package/src/client/admin-resource-client.ts +112 -0
- package/src/client/i18n/messages/nav.ts +0 -2
- package/src/client/i18n/messages/plan-versions.ts +0 -143
- package/src/client/index.ts +1 -2
- package/src/client/nav-builder.ts +9 -4
- package/src/index.ts +0 -1
- package/src/pages-standard/AdminLayout.vue +1 -1
- package/src/pages-standard/plan-versions/PlanVersionsDiff.vue +1 -1
- package/src/pages-standard/plan-versions/PlanVersionsTimeline.vue +1 -1
- package/src/pages-standard/plan-versions/catalog-history.types.ts +37 -0
- package/src/pages-standard/plan-versions/format.ts +2 -38
- package/src/client/plan-versions-catalog.ts +0 -380
- package/src/pages-standard/PlanVersionsPage.vue +0 -220
- package/src/pages-standard/plan-versions/PlanVersionHeader.vue +0 -309
- package/src/pages-standard/plan-versions/PlanVersionStatusBadge.vue +0 -48
- package/src/pages-standard/plan-versions/PlanVersionsAudit.vue +0 -326
- package/src/pages-standard/plan-versions/PlanVersionsKpi.vue +0 -65
- package/src/pages-standard/plan-versions/PlanVersionsList.vue +0 -315
- package/src/pages-standard/plan-versions/PlanVersionsMatrix.vue +0 -261
- package/src/pages-standard/plan-versions/types.ts +0 -33
- package/src/vue/use-plan-versions.ts +0 -83
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DEFAULT_SA_LOCALE,
|
|
3
|
-
SA_INTL_LOCALES,
|
|
4
3
|
defaultHttpClient,
|
|
5
4
|
defaultKvStore,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
planVersionsMessages
|
|
9
|
-
} from "./chunk-X5SQ5HMB.js";
|
|
5
|
+
navMessages
|
|
6
|
+
} from "./chunk-TBLXKSTR.js";
|
|
10
7
|
|
|
11
8
|
// src/client/version.ts
|
|
12
9
|
var ADMIN_UI_VERSION = "1.2.0";
|
|
@@ -174,7 +171,6 @@ var DEFAULT_STANDARD_PAGE_ROUTES = {
|
|
|
174
171
|
subscriptions: "/admin/subscriptions",
|
|
175
172
|
promoCodes: "/admin/promo-codes",
|
|
176
173
|
plans: "/admin/plans",
|
|
177
|
-
planVersions: "/admin/plan-versions",
|
|
178
174
|
audit: "/admin/audit",
|
|
179
175
|
users: "/admin/users",
|
|
180
176
|
pilots: "/admin/pilots",
|
|
@@ -184,13 +180,15 @@ var DEFAULT_STANDARD_PAGE_ROUTES = {
|
|
|
184
180
|
platformEmail: "/admin/platform-email",
|
|
185
181
|
platformEmailHistory: "/admin/platform-email-history"
|
|
186
182
|
};
|
|
183
|
+
function isSupportedStandardPageKey(key) {
|
|
184
|
+
return Object.hasOwn(DEFAULT_STANDARD_PAGE_ROUTES, key);
|
|
185
|
+
}
|
|
187
186
|
var DEFAULT_ICONS = {
|
|
188
187
|
dashboard: "dashboard",
|
|
189
188
|
tenants: "business",
|
|
190
189
|
subscriptions: "card_membership",
|
|
191
190
|
promoCodes: "local_activity",
|
|
192
191
|
plans: "workspace_premium",
|
|
193
|
-
planVersions: "history_edu",
|
|
194
192
|
audit: "history",
|
|
195
193
|
users: "people",
|
|
196
194
|
pilots: "flight_takeoff",
|
|
@@ -205,7 +203,6 @@ var PAGE_SECTIONS = {
|
|
|
205
203
|
discovery: "catalog",
|
|
206
204
|
bundles: "catalog",
|
|
207
205
|
plans: "catalog",
|
|
208
|
-
planVersions: "catalog",
|
|
209
206
|
marketingCatalog: "catalog",
|
|
210
207
|
promoCodes: "catalog",
|
|
211
208
|
tenants: "customers",
|
|
@@ -233,6 +230,7 @@ function buildRoutes(manifest, options = {}) {
|
|
|
233
230
|
const overrideIcons = { ...DEFAULT_ICONS, ...options.standardPageIcons };
|
|
234
231
|
const overrideNavSection = { ...defaultNavSections, ...options.standardPageNavSection };
|
|
235
232
|
for (const key of Object.keys(standard)) {
|
|
233
|
+
if (!isSupportedStandardPageKey(key)) continue;
|
|
236
234
|
const def = standard[key];
|
|
237
235
|
if (!def?.enabled) continue;
|
|
238
236
|
const cap = def.requiredCapability ?? null;
|
|
@@ -473,220 +471,74 @@ var BatchColumnFetcher = class {
|
|
|
473
471
|
}
|
|
474
472
|
};
|
|
475
473
|
|
|
476
|
-
// src/client/
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
if (typeof p.maxVehicles === "number") out.vehicles = p.maxVehicles;
|
|
485
|
-
if (typeof p.maxStorageGb === "number") out.storageGb = p.maxStorageGb;
|
|
486
|
-
return out;
|
|
487
|
-
}
|
|
488
|
-
var sortByPublishedDesc = (rows) => [...rows].sort((a, b) => {
|
|
489
|
-
const at = a.publishedAt ? Date.parse(a.publishedAt) : Number.POSITIVE_INFINITY;
|
|
490
|
-
const bt = b.publishedAt ? Date.parse(b.publishedAt) : Number.POSITIVE_INFINITY;
|
|
491
|
-
if (at !== bt) return bt - at;
|
|
492
|
-
return b.version - a.version;
|
|
493
|
-
});
|
|
494
|
-
function findLiveAt(rows, asOfMs) {
|
|
495
|
-
const candidates = rows.filter((r) => {
|
|
496
|
-
if (r.publishedAt === null) return false;
|
|
497
|
-
if (Date.parse(r.publishedAt) > asOfMs) return false;
|
|
498
|
-
if (r.supersededAt !== null && Date.parse(r.supersededAt) <= asOfMs) return false;
|
|
499
|
-
return true;
|
|
500
|
-
});
|
|
501
|
-
if (candidates.length === 0) return null;
|
|
502
|
-
return [...candidates].sort((a, b) => b.version - a.version)[0] ?? null;
|
|
503
|
-
}
|
|
504
|
-
function findCurrentLive(rows) {
|
|
505
|
-
return rows.find((r) => r.publishedAt !== null && r.supersededAt === null) ?? null;
|
|
506
|
-
}
|
|
507
|
-
function findDraft(rows) {
|
|
508
|
-
return rows.find((r) => r.publishedAt === null) ?? null;
|
|
509
|
-
}
|
|
510
|
-
function groupBy(rows, keyOf) {
|
|
511
|
-
const out = /* @__PURE__ */ new Map();
|
|
512
|
-
for (const r of rows) {
|
|
513
|
-
const k = keyOf(r);
|
|
514
|
-
const list = out.get(k) ?? [];
|
|
515
|
-
list.push(r);
|
|
516
|
-
out.set(k, list);
|
|
517
|
-
}
|
|
518
|
-
return out;
|
|
519
|
-
}
|
|
520
|
-
function resolvePlan(source, liveBase) {
|
|
521
|
-
const quotas = extractQuotas(source);
|
|
522
|
-
return {
|
|
523
|
-
source,
|
|
524
|
-
liveBase,
|
|
525
|
-
isDraft: source.publishedAt === null,
|
|
526
|
-
planId: source.planId,
|
|
527
|
-
features: source.features,
|
|
528
|
-
quotas,
|
|
529
|
-
monthlyNet: dec(source.monthlyNet),
|
|
530
|
-
yearlyNet: dec(source.yearlyNet),
|
|
531
|
-
marketed: source.marketed,
|
|
532
|
-
version: source.version,
|
|
533
|
-
maxUsers: quotas.users,
|
|
534
|
-
maxVehicles: quotas.vehicles,
|
|
535
|
-
maxStorageGb: quotas.storageGb
|
|
474
|
+
// src/client/admin-resource-client.ts
|
|
475
|
+
function createAdminResourceClient(options) {
|
|
476
|
+
const base = options.adminBase ?? "/api/v1/admin";
|
|
477
|
+
const tenantsEndpoint = `${base}/tenants`;
|
|
478
|
+
const getJson2 = async (url) => {
|
|
479
|
+
const response = await options.http(url, { method: "GET" });
|
|
480
|
+
assertSuccess(response.status, "GET", url);
|
|
481
|
+
return await response.json();
|
|
536
482
|
};
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
day: "2-digit",
|
|
546
|
-
month: "short",
|
|
547
|
-
year: "numeric"
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
function buildDraftsSnapshot(data, sortPlansFn, locale) {
|
|
551
|
-
const msg = planVersionsMessages[locale].catalog;
|
|
552
|
-
const planByKey = groupBy(data.planVersions, (r) => r.planId);
|
|
553
|
-
const plans = [];
|
|
554
|
-
for (const [, rows] of planByKey) {
|
|
555
|
-
const draft = findDraft(rows);
|
|
556
|
-
const live = findCurrentLive(rows);
|
|
557
|
-
if (draft) plans.push(resolvePlan(draft, live));
|
|
558
|
-
else if (live) plans.push(resolvePlan(live, null));
|
|
559
|
-
}
|
|
560
|
-
const draftCount = plans.filter((p) => p.isDraft).length;
|
|
561
|
-
return {
|
|
562
|
-
id: "drafts",
|
|
563
|
-
kind: "drafts",
|
|
564
|
-
status: "DRAFT",
|
|
565
|
-
label: msg.draftsLabel,
|
|
566
|
-
title: draftsTitle(draftCount, msg),
|
|
567
|
-
description: draftCount === 0 ? msg.draftsDescriptionEmpty : msg.draftsDescription,
|
|
568
|
-
asOf: null,
|
|
569
|
-
createdAt: null,
|
|
570
|
-
publishedAt: null,
|
|
571
|
-
authorEmail: null,
|
|
572
|
-
plans: sortPlansFn(plans),
|
|
573
|
-
draftCount,
|
|
574
|
-
regressionCount: 0
|
|
483
|
+
const sendJson = async (method, url, body) => {
|
|
484
|
+
const response = await options.http(url, {
|
|
485
|
+
method,
|
|
486
|
+
headers: { "content-type": "application/json" },
|
|
487
|
+
body: body === void 0 ? void 0 : JSON.stringify(body)
|
|
488
|
+
});
|
|
489
|
+
assertSuccess(response.status, method, url);
|
|
490
|
+
return await response.json();
|
|
575
491
|
};
|
|
576
|
-
}
|
|
577
|
-
function buildActiveSnapshot(data, sortPlansFn, locale) {
|
|
578
|
-
const msg = planVersionsMessages[locale].catalog;
|
|
579
|
-
const planByKey = groupBy(data.planVersions, (r) => r.planId);
|
|
580
|
-
const plans = [];
|
|
581
|
-
for (const [, rows] of planByKey) {
|
|
582
|
-
const live = findCurrentLive(rows);
|
|
583
|
-
if (live) plans.push(resolvePlan(live, null));
|
|
584
|
-
}
|
|
585
|
-
if (plans.length === 0) return null;
|
|
586
|
-
const publishedDates = plans.map((p) => p.source.publishedAt).filter((t) => t !== null).sort();
|
|
587
|
-
const latestPublished = publishedDates[publishedDates.length - 1];
|
|
588
492
|
return {
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
493
|
+
tenantsEndpoint,
|
|
494
|
+
loadTenantDetail: (slug) => getJson2(`${tenantsEndpoint}/${encodeURIComponent(slug)}`),
|
|
495
|
+
loadUsers: (filter) => getJson2(
|
|
496
|
+
`${base}/users${queryString({ q: filter.q, tenant: filter.tenant })}`
|
|
497
|
+
),
|
|
498
|
+
loadAudit: (filter) => getJson2(
|
|
499
|
+
`${base}/audit${queryString({
|
|
500
|
+
actor: filter.actor,
|
|
501
|
+
action: filter.action,
|
|
502
|
+
entity: filter.entity,
|
|
503
|
+
since: filter.since,
|
|
504
|
+
limit: filter.limit
|
|
505
|
+
})}`
|
|
506
|
+
),
|
|
507
|
+
loadSubscriptions: () => getJson2(`${base}/subscriptions`),
|
|
508
|
+
loadPromos: (filter) => getJson2(
|
|
509
|
+
`${base}/promo-codes${queryString({
|
|
510
|
+
search: filter.search,
|
|
511
|
+
status: filter.status
|
|
512
|
+
})}`
|
|
513
|
+
),
|
|
514
|
+
createPromo: async (payload) => {
|
|
515
|
+
await sendJson("POST", `${base}/promo-codes`, payload);
|
|
516
|
+
},
|
|
517
|
+
updatePromo: async (id, payload) => {
|
|
518
|
+
await sendJson("PATCH", `${base}/promo-codes/${encodeURIComponent(id)}`, payload);
|
|
519
|
+
},
|
|
520
|
+
deletePromo: async (id) => {
|
|
521
|
+
await sendJson("DELETE", `${base}/promo-codes/${encodeURIComponent(id)}`);
|
|
522
|
+
},
|
|
523
|
+
suspendTenant: (slug, reason) => sendJson("POST", `${tenantsEndpoint}/${encodeURIComponent(slug)}/suspend`, {
|
|
524
|
+
reason
|
|
525
|
+
}),
|
|
526
|
+
reactivateTenant: (slug) => sendJson("POST", `${tenantsEndpoint}/${encodeURIComponent(slug)}/reactivate`)
|
|
602
527
|
};
|
|
603
528
|
}
|
|
604
|
-
function
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
for (const r of data.planVersions) if (r.publishedAt) allPublishedAt.add(r.publishedAt);
|
|
608
|
-
if (allPublishedAt.size === 0) return [];
|
|
609
|
-
const planByKey = groupBy(data.planVersions, (r) => r.planId);
|
|
610
|
-
const liveTimestamps = /* @__PURE__ */ new Set();
|
|
611
|
-
for (const rows of planByKey.values()) {
|
|
612
|
-
const live = findCurrentLive(rows);
|
|
613
|
-
if (live?.publishedAt) liveTimestamps.add(live.publishedAt);
|
|
614
|
-
}
|
|
615
|
-
const liveSorted = [...liveTimestamps].sort();
|
|
616
|
-
const latestLive = liveSorted[liveSorted.length - 1];
|
|
617
|
-
const sortedDesc = [...allPublishedAt].sort((a, b) => Date.parse(b) - Date.parse(a));
|
|
618
|
-
const out = [];
|
|
619
|
-
for (const ts of sortedDesc) {
|
|
620
|
-
if (latestLive && Date.parse(ts) >= Date.parse(latestLive)) continue;
|
|
621
|
-
const tMs = Date.parse(ts) + 1;
|
|
622
|
-
const plans = [];
|
|
623
|
-
for (const [, rows] of planByKey) {
|
|
624
|
-
const live = findLiveAt(rows, tMs);
|
|
625
|
-
if (live) plans.push(resolvePlan(live, null));
|
|
626
|
-
}
|
|
627
|
-
if (plans.length === 0) continue;
|
|
628
|
-
const publishedAtThisEvent = data.planVersions.filter((r) => r.publishedAt === ts);
|
|
629
|
-
const regressionCount = publishedAtThisEvent.filter((r) => !r.nonRegressive).length;
|
|
630
|
-
const author = publishedAtThisEvent[0]?.publishedByUserId ?? null;
|
|
631
|
-
out.push({
|
|
632
|
-
id: `hist-${ts}`,
|
|
633
|
-
kind: "historical",
|
|
634
|
-
status: "ARCHIVED",
|
|
635
|
-
label: dateLabel(ts, locale),
|
|
636
|
-
title: summarizeEvent(publishedAtThisEvent, msg),
|
|
637
|
-
description: detailEvent(publishedAtThisEvent, msg),
|
|
638
|
-
asOf: ts,
|
|
639
|
-
createdAt: ts,
|
|
640
|
-
publishedAt: ts,
|
|
641
|
-
authorEmail: author,
|
|
642
|
-
plans: sortPlansFn(plans),
|
|
643
|
-
draftCount: 0,
|
|
644
|
-
regressionCount
|
|
645
|
-
});
|
|
646
|
-
}
|
|
647
|
-
return out;
|
|
648
|
-
}
|
|
649
|
-
function summarizeEvent(rows, msg) {
|
|
650
|
-
if (rows.length === 0) return msg.publishEvent;
|
|
651
|
-
if (rows.length === 1) {
|
|
652
|
-
const r = rows[0];
|
|
653
|
-
return formatMessage(msg.publishEventSingle, { planId: r.planId, version: r.version });
|
|
529
|
+
function assertSuccess(status, method, url) {
|
|
530
|
+
if (status < 200 || status >= 300) {
|
|
531
|
+
throw new Error(`${method} ${url} \u2192 HTTP ${status}`);
|
|
654
532
|
}
|
|
655
|
-
return formatMessage(msg.publishEventMultiple, { count: rows.length });
|
|
656
533
|
}
|
|
657
|
-
function
|
|
658
|
-
|
|
659
|
-
const
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
}
|
|
666
|
-
const idx = {};
|
|
667
|
-
for (let i = 0; i < order.length; i++) idx[order[i]] = i;
|
|
668
|
-
return (rows) => [...rows].sort((a, b) => {
|
|
669
|
-
const ai = idx[a.planId] ?? Number.POSITIVE_INFINITY;
|
|
670
|
-
const bi = idx[b.planId] ?? Number.POSITIVE_INFINITY;
|
|
671
|
-
if (ai !== bi) return ai - bi;
|
|
672
|
-
return a.planId.localeCompare(b.planId);
|
|
673
|
-
});
|
|
674
|
-
}
|
|
675
|
-
function buildSnapshots(data, options = {}) {
|
|
676
|
-
const locale = options.locale ?? DEFAULT_SA_LOCALE;
|
|
677
|
-
const sortPlansFn = sortPlansBy(options.planSortOrder);
|
|
678
|
-
const drafts = buildDraftsSnapshot(data, sortPlansFn, locale);
|
|
679
|
-
const active = buildActiveSnapshot(data, sortPlansFn, locale);
|
|
680
|
-
const historical = buildHistoricalSnapshots(data, sortPlansFn, locale);
|
|
681
|
-
const out = [drafts];
|
|
682
|
-
if (active) out.push(active);
|
|
683
|
-
out.push(...historical);
|
|
684
|
-
return out;
|
|
685
|
-
}
|
|
686
|
-
function listOpenDrafts(data) {
|
|
687
|
-
return {
|
|
688
|
-
plans: sortByPublishedDesc(data.planVersions).filter((r) => r.publishedAt === null)
|
|
689
|
-
};
|
|
534
|
+
function queryString(params) {
|
|
535
|
+
const search = new URLSearchParams();
|
|
536
|
+
for (const [key, value2] of Object.entries(params)) {
|
|
537
|
+
if (value2 === void 0 || value2 === null || value2 === "") continue;
|
|
538
|
+
search.set(key, String(value2));
|
|
539
|
+
}
|
|
540
|
+
const value = search.toString();
|
|
541
|
+
return value ? `?${value}` : "";
|
|
690
542
|
}
|
|
691
543
|
|
|
692
544
|
export {
|
|
@@ -709,6 +561,5 @@ export {
|
|
|
709
561
|
ActionRegistry,
|
|
710
562
|
BatchColumnDriftError,
|
|
711
563
|
BatchColumnFetcher,
|
|
712
|
-
|
|
713
|
-
listOpenDrafts
|
|
564
|
+
createAdminResourceClient
|
|
714
565
|
};
|
|
@@ -1312,7 +1312,6 @@ var navMessages = defineMessages(
|
|
|
1312
1312
|
subscriptions: "Abonnements",
|
|
1313
1313
|
promoCodes: "Promo-Codes",
|
|
1314
1314
|
plans: "Pl\xE4ne & Versionen",
|
|
1315
|
-
planVersions: "Plan-Versionen",
|
|
1316
1315
|
audit: "Audit-Log",
|
|
1317
1316
|
users: "Benutzer",
|
|
1318
1317
|
pilots: "Piloten",
|
|
@@ -1336,7 +1335,6 @@ var navMessages = defineMessages(
|
|
|
1336
1335
|
subscriptions: "Subscriptions",
|
|
1337
1336
|
promoCodes: "Promo codes",
|
|
1338
1337
|
plans: "Plans & versions",
|
|
1339
|
-
planVersions: "Plan versions",
|
|
1340
1338
|
audit: "Audit log",
|
|
1341
1339
|
users: "Users",
|
|
1342
1340
|
pilots: "Pilots",
|
|
@@ -1979,21 +1977,6 @@ var planEditorMessages = defineMessages(
|
|
|
1979
1977
|
var planVersionsMessages = defineMessages(
|
|
1980
1978
|
{
|
|
1981
1979
|
compareEnd: "Vergleich beenden",
|
|
1982
|
-
page: {
|
|
1983
|
-
loadingCatalog: "Catalog wird geladen\u2026",
|
|
1984
|
-
noAuditLoader: "Kein Audit-Loader konfiguriert."
|
|
1985
|
-
},
|
|
1986
|
-
header: {
|
|
1987
|
-
modeList: "Plan-Liste",
|
|
1988
|
-
modeMatrix: "Feature-Matrix",
|
|
1989
|
-
modeAudit: "Aktivit\xE4t",
|
|
1990
|
-
publishedOn: "Publiziert {date}",
|
|
1991
|
-
openDrafts: "offene Drafts",
|
|
1992
|
-
regressionOne: "Regression",
|
|
1993
|
-
regressionMany: "Regressionen",
|
|
1994
|
-
startPublishFlow: "Publish-Flow starten",
|
|
1995
|
-
compareModeHint: "Vergleichsmodus aktiv \u2014 andere Ansichten deaktiviert"
|
|
1996
|
-
},
|
|
1997
1980
|
status: {
|
|
1998
1981
|
draft: "DRAFT",
|
|
1999
1982
|
active: "AKTIV",
|
|
@@ -2007,29 +1990,6 @@ var planVersionsMessages = defineMessages(
|
|
|
2007
1990
|
unknown: "unbekannt",
|
|
2008
1991
|
compareHint: "Rechtsklick auf Snapshot \u2192 vergleichen"
|
|
2009
1992
|
},
|
|
2010
|
-
list: {
|
|
2011
|
-
kpiPlans: "Pakete",
|
|
2012
|
-
kpiSelfService: "Self-Service",
|
|
2013
|
-
kpiOfTotal: "von {count}",
|
|
2014
|
-
kpiFeaturesTotal: "Features gesamt",
|
|
2015
|
-
missingPlansLabel: "Fehlende Pakete:",
|
|
2016
|
-
missingPlansHint: "\u2014 keine Live-Version in diesem Snapshot.",
|
|
2017
|
-
createDraftFor: "Draft f\xFCr {planId}",
|
|
2018
|
-
colPlan: "Paket",
|
|
2019
|
-
colPriceNet: "Preis (netto)",
|
|
2020
|
-
colFeatures: "Features",
|
|
2021
|
-
draftHintLabel: "Arbeitsstand:",
|
|
2022
|
-
draftHintBefore: "Drafts oben in der Liste. Limits, Preise und Features per Klick auf",
|
|
2023
|
-
draftHintEditButton: '\u201EBearbeiten"',
|
|
2024
|
-
draftHintMiddle: "\xE4ndern (ohne MFA). Erst",
|
|
2025
|
-
draftHintPublishFlow: "Publish-Flow",
|
|
2026
|
-
draftHintAfter: "(Validate \u2192 Diff-Review \u2192 MFA \u2192 Apply) macht sie f\xFCr k\xFCnftige Renewals wirksam."
|
|
2027
|
-
},
|
|
2028
|
-
matrix: {
|
|
2029
|
-
colFeature: "Feature",
|
|
2030
|
-
perMonthShort: "/Mo",
|
|
2031
|
-
fallbackGroup: "Sonstige"
|
|
2032
|
-
},
|
|
2033
1993
|
diff: {
|
|
2034
1994
|
legend: "Vergleich",
|
|
2035
1995
|
plansChanged: "Pakete ge\xE4ndert",
|
|
@@ -2053,24 +2013,10 @@ var planVersionsMessages = defineMessages(
|
|
|
2053
2013
|
yearlyNet: "Preis j\xE4hrlich (netto)",
|
|
2054
2014
|
unitSize: "Einheitsgr\xF6\xDFe"
|
|
2055
2015
|
},
|
|
2056
|
-
audit: {
|
|
2057
|
-
title: "Aktivit\xE4t",
|
|
2058
|
-
eventCount: "{count} Events",
|
|
2059
|
-
loading: "Audit-Trail wird geladen\u2026",
|
|
2060
|
-
empty: "Keine Plan-/Add-on-Events im Audit-Log gefunden.",
|
|
2061
|
-
actionPlanPublished: "Plan publiziert",
|
|
2062
|
-
actionPlanDraftCreated: "Plan-Draft angelegt",
|
|
2063
|
-
actionPlanDraftUpdated: "Plan-Draft ge\xE4ndert",
|
|
2064
|
-
actionPlanDraftDeleted: "Plan-Draft gel\xF6scht",
|
|
2065
|
-
actionCatalogPublished: "Catalog publiziert",
|
|
2066
|
-
detailRegression: "Mit mindestens einer Verschlechterung publiziert.",
|
|
2067
|
-
detailFieldsChanged: "{count} Felder ge\xE4ndert."
|
|
2068
|
-
},
|
|
2069
2016
|
bulkPublish: {
|
|
2070
2017
|
changeNoteRequired: "changeNote ist Pflicht beim Publish."
|
|
2071
2018
|
},
|
|
2072
2019
|
format: {
|
|
2073
|
-
priceIndividual: "individuell",
|
|
2074
2020
|
today: "heute",
|
|
2075
2021
|
yesterday: "gestern",
|
|
2076
2022
|
daysAgo: "vor {count} Tagen",
|
|
@@ -2079,40 +2025,10 @@ var planVersionsMessages = defineMessages(
|
|
|
2079
2025
|
monthsAgo: "vor {count} Monaten",
|
|
2080
2026
|
yearsAgoOne: "vor {count} Jahr",
|
|
2081
2027
|
yearsAgoMany: "vor {count} Jahren"
|
|
2082
|
-
},
|
|
2083
|
-
catalog: {
|
|
2084
|
-
draftsLabel: "Arbeitsstand",
|
|
2085
|
-
draftsTitleEmpty: "Keine offenen Drafts",
|
|
2086
|
-
draftsTitleOne: "{count} offener Draft bereit f\xFCr Publish",
|
|
2087
|
-
draftsTitleMany: "{count} offene Drafts bereit f\xFCr Publish",
|
|
2088
|
-
draftsDescriptionEmpty: "Lege einen Draft an, um Limits, Preise oder Features zu \xE4ndern. Drafts sind ohne MFA editierbar und werden erst beim Publish wirksam.",
|
|
2089
|
-
draftsDescription: "Diese Tabelle zeigt, wie der Catalog nach Publish aller Drafts aussehen w\xFCrde. Bestehende Mandanten bleiben auf der vorherigen Version, bis sie aktiv migriert werden.",
|
|
2090
|
-
activeLabel: "Aktuell",
|
|
2091
|
-
activeTitle: "Live-Catalog",
|
|
2092
|
-
activeDescription: "Diese Plan-Versionen sind aktuell f\xFCr neue Onboardings und f\xFCr Renewals nach Stichtag aktiv.",
|
|
2093
|
-
publishEvent: "Publish-Event",
|
|
2094
|
-
publishEventSingle: "{planId} v{version} publiziert",
|
|
2095
|
-
publishEventMultiple: "{count} Versionen publiziert",
|
|
2096
|
-
reconstructedSnapshot: "Snapshot rekonstruiert aus per-Entity-Versionen."
|
|
2097
2028
|
}
|
|
2098
2029
|
},
|
|
2099
2030
|
{
|
|
2100
2031
|
compareEnd: "End comparison",
|
|
2101
|
-
page: {
|
|
2102
|
-
loadingCatalog: "Loading catalog\u2026",
|
|
2103
|
-
noAuditLoader: "No audit loader configured."
|
|
2104
|
-
},
|
|
2105
|
-
header: {
|
|
2106
|
-
modeList: "Plan list",
|
|
2107
|
-
modeMatrix: "Feature matrix",
|
|
2108
|
-
modeAudit: "Activity",
|
|
2109
|
-
publishedOn: "Published {date}",
|
|
2110
|
-
openDrafts: "open drafts",
|
|
2111
|
-
regressionOne: "regression",
|
|
2112
|
-
regressionMany: "regressions",
|
|
2113
|
-
startPublishFlow: "Start publish flow",
|
|
2114
|
-
compareModeHint: "Comparison mode active \u2014 other views disabled"
|
|
2115
|
-
},
|
|
2116
2032
|
status: {
|
|
2117
2033
|
draft: "DRAFT",
|
|
2118
2034
|
active: "ACTIVE",
|
|
@@ -2126,29 +2042,6 @@ var planVersionsMessages = defineMessages(
|
|
|
2126
2042
|
unknown: "unknown",
|
|
2127
2043
|
compareHint: "Right-click a snapshot \u2192 compare"
|
|
2128
2044
|
},
|
|
2129
|
-
list: {
|
|
2130
|
-
kpiPlans: "Plans",
|
|
2131
|
-
kpiSelfService: "Self-service",
|
|
2132
|
-
kpiOfTotal: "of {count}",
|
|
2133
|
-
kpiFeaturesTotal: "Features total",
|
|
2134
|
-
missingPlansLabel: "Missing plans:",
|
|
2135
|
-
missingPlansHint: "\u2014 no live version in this snapshot.",
|
|
2136
|
-
createDraftFor: "Draft for {planId}",
|
|
2137
|
-
colPlan: "Plan",
|
|
2138
|
-
colPriceNet: "Price (net)",
|
|
2139
|
-
colFeatures: "Features",
|
|
2140
|
-
draftHintLabel: "Working state:",
|
|
2141
|
-
draftHintBefore: "Drafts at the top of the list. Change limits, prices and features by clicking",
|
|
2142
|
-
draftHintEditButton: '"Edit"',
|
|
2143
|
-
draftHintMiddle: "(without MFA). Only the",
|
|
2144
|
-
draftHintPublishFlow: "publish flow",
|
|
2145
|
-
draftHintAfter: "(validate \u2192 diff review \u2192 MFA \u2192 apply) makes them effective for future renewals."
|
|
2146
|
-
},
|
|
2147
|
-
matrix: {
|
|
2148
|
-
colFeature: "Feature",
|
|
2149
|
-
perMonthShort: "/mo",
|
|
2150
|
-
fallbackGroup: "Other"
|
|
2151
|
-
},
|
|
2152
2045
|
diff: {
|
|
2153
2046
|
legend: "Comparison",
|
|
2154
2047
|
plansChanged: "Plans changed",
|
|
@@ -2172,24 +2065,10 @@ var planVersionsMessages = defineMessages(
|
|
|
2172
2065
|
yearlyNet: "Price yearly (net)",
|
|
2173
2066
|
unitSize: "Unit size"
|
|
2174
2067
|
},
|
|
2175
|
-
audit: {
|
|
2176
|
-
title: "Activity",
|
|
2177
|
-
eventCount: "{count} events",
|
|
2178
|
-
loading: "Loading audit trail\u2026",
|
|
2179
|
-
empty: "No plan/add-on events found in the audit log.",
|
|
2180
|
-
actionPlanPublished: "Plan published",
|
|
2181
|
-
actionPlanDraftCreated: "Plan draft created",
|
|
2182
|
-
actionPlanDraftUpdated: "Plan draft changed",
|
|
2183
|
-
actionPlanDraftDeleted: "Plan draft deleted",
|
|
2184
|
-
actionCatalogPublished: "Catalog published",
|
|
2185
|
-
detailRegression: "Published with at least one regression.",
|
|
2186
|
-
detailFieldsChanged: "{count} fields changed."
|
|
2187
|
-
},
|
|
2188
2068
|
bulkPublish: {
|
|
2189
2069
|
changeNoteRequired: "changeNote is required when publishing."
|
|
2190
2070
|
},
|
|
2191
2071
|
format: {
|
|
2192
|
-
priceIndividual: "custom",
|
|
2193
2072
|
today: "today",
|
|
2194
2073
|
yesterday: "yesterday",
|
|
2195
2074
|
daysAgo: "{count} days ago",
|
|
@@ -2198,21 +2077,6 @@ var planVersionsMessages = defineMessages(
|
|
|
2198
2077
|
monthsAgo: "{count} months ago",
|
|
2199
2078
|
yearsAgoOne: "{count} year ago",
|
|
2200
2079
|
yearsAgoMany: "{count} years ago"
|
|
2201
|
-
},
|
|
2202
|
-
catalog: {
|
|
2203
|
-
draftsLabel: "Working state",
|
|
2204
|
-
draftsTitleEmpty: "No open drafts",
|
|
2205
|
-
draftsTitleOne: "{count} open draft ready to publish",
|
|
2206
|
-
draftsTitleMany: "{count} open drafts ready to publish",
|
|
2207
|
-
draftsDescriptionEmpty: "Create a draft to change limits, prices or features. Drafts are editable without MFA and only take effect when published.",
|
|
2208
|
-
draftsDescription: "This table shows what the catalog would look like after publishing all drafts. Existing tenants stay on the previous version until they are actively migrated.",
|
|
2209
|
-
activeLabel: "Current",
|
|
2210
|
-
activeTitle: "Live catalog",
|
|
2211
|
-
activeDescription: "These plan versions are currently active for new onboardings and for renewals after the effective date.",
|
|
2212
|
-
publishEvent: "Publish event",
|
|
2213
|
-
publishEventSingle: "{planId} v{version} published",
|
|
2214
|
-
publishEventMultiple: "{count} versions published",
|
|
2215
|
-
reconstructedSnapshot: "Snapshot reconstructed from per-entity versions."
|
|
2216
2080
|
}
|
|
2217
2081
|
}
|
|
2218
2082
|
);
|
|
@@ -3224,7 +3088,6 @@ export {
|
|
|
3224
3088
|
mergeMessages,
|
|
3225
3089
|
navMessages,
|
|
3226
3090
|
formatMessage,
|
|
3227
|
-
planVersionsMessages,
|
|
3228
3091
|
formatCurrency,
|
|
3229
3092
|
SA_MESSAGES,
|
|
3230
3093
|
resolveMessages
|