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);