From a314b5350e269676e8c39eda4cc7842751b1a7fc Mon Sep 17 00:00:00 2001
From: crupest <crupest@outlook.com>
Date: Tue, 1 Sep 2020 02:32:06 +0800
Subject: ...

---
 .../TimelinePropertyChangeDialog.tsx               | 72 ++++++++++++++++++++++
 1 file changed, 72 insertions(+)
 create mode 100644 Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx

(limited to 'Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx')

diff --git a/Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx
new file mode 100644
index 00000000..87638f31
--- /dev/null
+++ b/Timeline/ClientApp/src/app/views/timeline-common/TimelinePropertyChangeDialog.tsx
@@ -0,0 +1,72 @@
+import React from "react";
+
+import {
+  TimelineVisibility,
+  kTimelineVisibilities,
+  TimelineChangePropertyRequest,
+} from "@/services/timeline";
+
+import OperationDialog, {
+  OperationSelectInputInfoOption,
+} from "../common/OperationDialog";
+
+export interface TimelinePropertyInfo {
+  visibility: TimelineVisibility;
+  description: string;
+}
+
+export interface TimelinePropertyChangeDialogProps {
+  open: boolean;
+  close: () => void;
+  oldInfo: TimelinePropertyInfo;
+  onProcess: (request: TimelineChangePropertyRequest) => Promise<void>;
+}
+
+const labelMap: { [key in TimelineVisibility]: string } = {
+  Private: "timeline.visibility.private",
+  Public: "timeline.visibility.public",
+  Register: "timeline.visibility.register",
+};
+
+const TimelinePropertyChangeDialog: React.FC<TimelinePropertyChangeDialogProps> = (
+  props
+) => {
+  return (
+    <OperationDialog
+      title={"timeline.dialogChangeProperty.title"}
+      titleColor="default"
+      inputScheme={[
+        {
+          type: "select",
+          label: "timeline.dialogChangeProperty.visibility",
+          options: kTimelineVisibilities.map<OperationSelectInputInfoOption>(
+            (v) => ({
+              label: labelMap[v],
+              value: v,
+            })
+          ),
+          initValue: props.oldInfo.visibility,
+        },
+        {
+          type: "text",
+          label: "timeline.dialogChangeProperty.description",
+          initValue: props.oldInfo.description,
+        },
+      ]}
+      open={props.open}
+      close={props.close}
+      onProcess={([newVisibility, newDescription]) => {
+        const req: TimelineChangePropertyRequest = {};
+        if (newVisibility !== props.oldInfo.visibility) {
+          req.visibility = newVisibility as TimelineVisibility;
+        }
+        if (newDescription !== props.oldInfo.description) {
+          req.description = newDescription as string;
+        }
+        return props.onProcess(req);
+      }}
+    />
+  );
+};
+
+export default TimelinePropertyChangeDialog;
-- 
cgit v1.2.3

