From 29ea10a29da1c2dbd8037766613be595313475c1 Mon Sep 17 00:00:00 2001 From: Simon Hiller Date: Tue, 27 Feb 2024 18:06:03 +0100 Subject: [PATCH] chor: move both Modal to tsx format --- js/src/forum/addComposerItems.js | 20 ++++++++++- js/src/forum/components/CreatePollModal.js | 26 -------------- js/src/forum/components/CreatePollModal.tsx | 34 +++++++++++++++++++ .../{EditPollModal.js => EditPollModal.tsx} | 6 ++-- js/src/forum/components/PollForm.tsx | 2 +- 5 files changed, 58 insertions(+), 30 deletions(-) delete mode 100755 js/src/forum/components/CreatePollModal.js create mode 100755 js/src/forum/components/CreatePollModal.tsx rename js/src/forum/components/{EditPollModal.js => EditPollModal.tsx} (73%) diff --git a/js/src/forum/addComposerItems.js b/js/src/forum/addComposerItems.js index 62e4e97e..bbe07b65 100644 --- a/js/src/forum/addComposerItems.js +++ b/js/src/forum/addComposerItems.js @@ -7,10 +7,28 @@ import ReplyComposer from 'flarum/forum/components/ReplyComposer'; import CreatePollModal from './components/CreatePollModal'; +function toPoll(data) { + if (data) { + const poll = app.store.createRecord('polls'); + poll.pushAttributes(data); + poll.pushData({ + relationships: { + options: data.options.map((option) => { + const pollOption = app.store.createRecord('poll_options'); + pollOption.pushAttributes(option); + return pollOption; + }), + }, + }); + return poll; + } + return data; +} + export const addToComposer = (composer) => { composer.prototype.addPoll = function () { app.modal.show(CreatePollModal, { - poll: this.composer.fields.poll, + poll: toPoll(this.composer.fields.poll), onsubmit: (poll) => (this.composer.fields.poll = poll), }); }; diff --git a/js/src/forum/components/CreatePollModal.js b/js/src/forum/components/CreatePollModal.js deleted file mode 100755 index 1a59f08d..00000000 --- a/js/src/forum/components/CreatePollModal.js +++ /dev/null @@ -1,26 +0,0 @@ -import app from 'flarum/forum/app'; -import Modal from 'flarum/common/components/Modal'; -import PollForm from './PollForm'; - -export default class CreatePollModal extends Modal { - title() { - return app.translator.trans('fof-polls.forum.modal.add_title'); - } - - className() { - return 'PollDiscussionModal Modal--medium'; - } - - content() { - return [ -
- -
, - ]; - } - - onsubmit(data) { - this.hide(); - this.attrs.onsubmit(data); - } -} diff --git a/js/src/forum/components/CreatePollModal.tsx b/js/src/forum/components/CreatePollModal.tsx new file mode 100755 index 00000000..0c4a19ae --- /dev/null +++ b/js/src/forum/components/CreatePollModal.tsx @@ -0,0 +1,34 @@ +import type Mithril from 'mithril'; +import app from 'flarum/forum/app'; +import Modal, { IInternalModalAttrs } from 'flarum/common/components/Modal'; +import PollForm from './PollForm'; +import PollModel from '../models/Poll'; +import PollFormState from '../states/PollFormState'; + +interface CreatePollModalAttrs extends IInternalModalAttrs { + poll: PollModel; + onsubmit: (data: object) => Promise; +} + +export default class CreatePollModal extends Modal { + title(): Mithril.Children { + return app.translator.trans('fof-polls.forum.modal.add_title'); + } + + className(): string { + return 'PollDiscussionModal Modal--medium'; + } + + content(): Mithril.Children { + return [ +
+ +
, + ]; + } + + async onFormSubmit(data: object, state: PollFormState): Promise { + this.hide(); + await this.attrs.onsubmit(data); + } +} diff --git a/js/src/forum/components/EditPollModal.js b/js/src/forum/components/EditPollModal.tsx similarity index 73% rename from js/src/forum/components/EditPollModal.js rename to js/src/forum/components/EditPollModal.tsx index be113f49..76cc87fa 100755 --- a/js/src/forum/components/EditPollModal.js +++ b/js/src/forum/components/EditPollModal.tsx @@ -1,12 +1,14 @@ +import type Mithril from 'mithril'; import app from 'flarum/forum/app'; import CreatePollModal from './CreatePollModal'; +import PollFormState from '../states/PollFormState'; export default class EditPollModal extends CreatePollModal { - title() { + title(): Mithril.Children { return app.translator.trans('fof-polls.forum.modal.edit_title'); } - async onsubmit(data, state) { + async onFormSubmit(data: object, state: PollFormState): Promise { await state.save(data); // Show success alert diff --git a/js/src/forum/components/PollForm.tsx b/js/src/forum/components/PollForm.tsx index 08378f73..2bdaadc7 100644 --- a/js/src/forum/components/PollForm.tsx +++ b/js/src/forum/components/PollForm.tsx @@ -274,7 +274,7 @@ export default class PollForm extends Component { } } - removeOption(i:number):void { + removeOption(i: number): void { this.options.splice(i, 1); this.optionAnswers.splice(i, 1); this.optionImageUrls.splice(i, 1);