diff --git a/marko/page/story-content/components/chapter-meta/component.js b/marko/page/story-content/components/chapter-meta/component.js index d845544..780b245 100644 --- a/marko/page/story-content/components/chapter-meta/component.js +++ b/marko/page/story-content/components/chapter-meta/component.js @@ -1,7 +1,17 @@ const moment = require("moment") module.exports = class { - onCreate({kind, weak, value, updated}) { + onCreate() { + this.state = {text: null, color: "color-menu", href: null, tooltip: null} + } + + onInput(input) { + if (this.state != null) { + this.updateState(input) + } + } + + updateState({kind, weak, value, updated}) { this.state = {text: null, color: "color-menu", href: null, tooltip: null} if (value == null || value == "") { diff --git a/marko/page/story-content/components/chapter/component.js b/marko/page/story-content/components/chapter/component.js index fbed954..7448a98 100644 --- a/marko/page/story-content/components/chapter/component.js +++ b/marko/page/story-content/components/chapter/component.js @@ -1,5 +1,25 @@ module.exports = class { onCreate(input) { - this.state = Object.assign({}, input.chapter) + this.state = { + modal: null, + removed: false, + } + } + + updateChapter(data) { + this.emit("edit", data) + } + + removeChapter() { + this.state.removed = true + this.emit("remove") + } + + open(modal) { + this.state.modal = modal + } + + close() { + this.state.modal = null } } \ No newline at end of file diff --git a/marko/page/story-content/components/chapter/components/edit-chapter-modal/component.js b/marko/page/story-content/components/chapter/components/edit-chapter-modal/component.js new file mode 100644 index 0000000..284f398 --- /dev/null +++ b/marko/page/story-content/components/chapter/components/edit-chapter-modal/component.js @@ -0,0 +1,77 @@ +const moment = require("moment") + +const {chapterApi} = require("../../../../../../../rpdata/api/Chapter") + +module.exports = class { + onCreate(input) { + this.state = { + error: null, + loading: false, + values: { + title: "", + source: "", + fictionalDate: "", + }, + } + + this.first = false + } + + onInput(input) { + if (input.chapter && !this.first) { + let {fictionalDate, title, source} = input.chapter + + if (fictionalDate != null) { + fictionalDate = moment.utc(fictionalDate).format("MMM D, YYYY") + } + + this.state.values = {fictionalDate, title, source} + } + } + + change(key, ev) { + this.state.values[key] = ev.target.value + } + + open() { + + } + + close() { + this.first = false + this.emit("close") + } + + save() { + const values = this.state.values + + let fictionalDate = new Date(values.fictionalDate + " UTC") + if (values.fictionalDate != "") { + if (Number.isNaN(fictionalDate)) { + this.state.error = `Could not parse ${values.fictionalDate} as date` + return + } + } else { + fictionalDate = null + } + + const input = {id: this.input.chapter.id, title: values.title, source: values.source} + + if (fictionalDate != null) { + input.fictionalDate = fictionalDate + } else { + input.clearFictionalDate = true + } + + chapterApi.editChapter(input).then(data => { + this.emit("edit", data) + this.emit("close") + }).catch(errs => { + console.warn("Failed to edit:", errs) + + this.state.error = "Failed to edit: " + errs[0].message + }).then(() => { + this.state.loading = false + }) + } +} \ No newline at end of file diff --git a/marko/page/story-content/components/chapter/components/edit-chapter-modal/index.marko b/marko/page/story-content/components/chapter/components/edit-chapter-modal/index.marko new file mode 100644 index 0000000..fdf6a39 --- /dev/null +++ b/marko/page/story-content/components/chapter/components/edit-chapter-modal/index.marko @@ -0,0 +1,11 @@ + +

Edit Chapter

+ +

${state.error}

+ + + +