Files
discord-decomp/modules/polls/useCreatePollFormData.tsx
T
2026-11-01 12:12:55 +02:00

295 lines
9.4 KiB
TypeScript

// Metro module 11376 (f11377).
import _slicedToArray from "../../_bundle/_slicedToArray";
import { useState, useCallback, useEffect } from "react";
import { PollDurations, MIN_NUMBER_OF_ANSWERS_PER_POLL, MAX_NUMBER_OF_ANSWERS_PER_POLL } from "./PollsConstants";
import { generateEmptyPollAnswer, isAnswerFilled, isIncompleteAnswer } from "./PollsUtils";
import useRequest from "../../hooks/useRequest";
import PollsActionCreators from "./PollsActionCreators";
import { removePollUploadAttachment, handlePollGifAttachmentAdd, handlePollMediaAttachmentAdd, removeAllPollUploadAttachments } from "./PollUploadAttachmentActionCreators.native";
import { getFileNameFromGifUrl } from "./PollAttachmentUtils";
import { PollMediaUploadAttachmentStatus } from "./PollTypes";
import { intl, t } from "../../intl/index.native";
import { PollLayoutTypes } from "../../_bundle/Module8002";
let env7730 = {};
const createPollCreationImageForMedia = function createPollCreationImageForMedia(a0, a1) {
return {
mediaAttachmentState: {
status: a1,
mediaURL: a0
},
emoji: void 0,
stickerId: void 0
};
};
export default function useCreatePollCommonData(a0, a1, a2, a3) {
let env18789 = {
$parent: env7730
};
env18789[0] = a0;
env18789[1] = a1;
env18789[2] = a2;
env18789[3] = a3;
const id = a0.id;
env18789[4] = id;
const r39 = _slicedToArray(useState(() => {
const r4 = env18789[3];
const r2 = r4 == null;
let r8 = void 0;
if (!r2) {
const initialAnswers = r4.initialAnswers;
r8 = initialAnswers == null ? void 0 : initialAnswers.map((initialAnswer) => ({
...generateEmptyPollAnswer(),
...initialAnswer
}));
}
if (r8 == null) {
r8 = [generateEmptyPollAnswer(), generateEmptyPollAnswer()];
}
return r8;
}), 2);
const answers = r39[0];
env18789[5] = answers;
env18789[6] = r39[1];
let r42 = a3?.initialQuestion;
if (r42 == null) {
r42 = "";
}
const r44 = _slicedToArray(useState(r42), 2);
const question = r44[0];
env18789[7] = question;
const setQuestion = r44[1];
env18789[8] = setQuestion;
const r48 = _slicedToArray(useState(false), 2);
const allowMultiSelect = r48[0];
env18789[9] = allowMultiSelect;
const setAllowMultiSelect = r48[1];
let r50 = a3?.initialDuration;
if (r50 == null) {
r50 = PollDurations.ONE_DAY;
}
const r53 = _slicedToArray(useState(r50), 2);
const duration = r53[0];
env18789[10] = duration;
const setDuration = r53[1];
const r57 = _slicedToArray(useState({}), 2);
const fieldErrors = r57[0];
env18789[11] = r57[1];
const [shouldFocusOnInvalidField, setShouldFocusOnInvalidField] = useState(false);
env18789[12] = setShouldFocusOnInvalidField;
const r35 = answers.filter((answer) => isAnswerFilled(answer));
env18789[13] = r35;
const r67 = answers.filter((answer) => isIncompleteAnswer(answer));
const canPost = question.length > 0 && r35.length >= MIN_NUMBER_OF_ANSWERS_PER_POLL && r67.length === 0;
let c18790_0;
const r80 = _slicedToArray(useRequest(PollsActionCreators.createPoll), 2);
const r34 = r80[0];
env18789[14] = r34;
const r81 = r80[1];
const { error, loading } = r81;
env18789[15] = loading;
const canAddMoreAnswers = answers.length < MAX_NUMBER_OF_ANSWERS_PER_POLL;
env18789[16] = canAddMoreAnswers;
const canRemoveMoreAnswers = answers.length > MIN_NUMBER_OF_ANSWERS_PER_POLL;
env18789[17] = canRemoveMoreAnswers;
const callback3 = useCallback((a0) => {
(0, env18789[11])((a0) => {
const r1 = {
...a0
};
delete r1["question"];
return r1;
});
(0, env18789[8])(a0);
}, []);
const callback2 = useCallback(({ text, index, localCreationAnswerId }) => {
(0, env18789[11])((a0) => {
const r1 = {
...a0
};
delete r1[`answer-${localCreationAnswerId}`];
return r1;
});
(0, env18789[6])((a0) => {
const r1 = [...a0];
r1[index] = {
...r1[index],
text
};
return r1;
});
}, []);
const callback4 = useCallback((image, c27040_1) => {
(0, env18789[6])((a0) => {
const r1 = [...a0];
r1[c27040_1] = {
...r1[c27040_1],
image
};
return r1;
});
}, []);
env18789[18] = callback4;
const callback5 = useCallback((a0, a1, a2) => {
const r8 = env18789[5][a1];
const mediaAttachmentState = r8.image?.mediaAttachmentState;
if (mediaAttachmentState != null && mediaAttachmentState.mediaURL !== a2) {
removePollUploadAttachment(a0, r8.localCreationAnswerId, getFileNameFromGifUrl(r8.localCreationAnswerId, mediaAttachmentState.mediaURL));
}
}, [answers]);
env18789[19] = callback5;
c18790_0 = void 0;
c18790_0 = async (c30396_0, c30396_1, c30396_2) => {
let c30396_4;
c30396_4 = void 0;
let c31622_0 = c30396_1;
let c31622_1 = c30396_2;
const localCreationAnswerId2 = env18789[5][c30396_1].localCreationAnswerId;
(0, env18789[19])(c30396_0, c30396_1);
(0, env18789[18])(createPollCreationImageForMedia(c30396_2, PollMediaUploadAttachmentStatus.PREPARING), c30396_1);
if (await handlePollGifAttachmentAdd(c30396_0, localCreationAnswerId2, c30396_2) != null) {
env18789[18]((0, createPollCreationImageForMedia)(c31622_1, PollMediaUploadAttachmentStatus.READY_TO_UPLOAD), c31622_0);
} else {
env18789[18]((0, createPollCreationImageForMedia)(c31622_1, PollMediaUploadAttachmentStatus.ERROR), c31622_0);
}
};
const callback = useCallback(function() {
return c18790_0.apply(this, arguments);
}, [answers, callback4, callback5]);
const callback6 = useCallback((a0, a1, a2) => {
const localCreationAnswerId2 = env18789[5][a1].localCreationAnswerId;
const objectURL = URL.createObjectURL(a2);
(0, env18789[19])(a0, a1);
const r18 = env18789[18];
r18({
mediaAttachmentState: {
status: PollMediaUploadAttachmentStatus.PREPARING,
mediaURL: objectURL
},
emoji: void 0,
stickerId: void 0
}, a1);
handlePollMediaAttachmentAdd(a0, localCreationAnswerId2, a2);
r18({
mediaAttachmentState: {
status: PollMediaUploadAttachmentStatus.READY_TO_UPLOAD,
mediaURL: objectURL
},
emoji: void 0,
stickerId: void 0
}, a1);
}, [answers, callback4, callback5]);
const callback7 = useCallback((a0, a1) => {
(0, env18789[19])(env18789[4], a1);
(0, env18789[18])({
emoji: a0,
stickerId: void 0,
mediaAttachmentState: void 0
}, a1);
}, [id, callback4, callback5]);
const callback8 = useCallback((c27041_0) => {
(0, env18789[6])((a0) => {
const r2 = [...a0];
r2[c27041_0] = {
...r2[c27041_0],
image: void 0
};
return r2;
});
}, []);
const callback9 = useCallback(() => {
if (env18789[16]) {
(0, env18789[6])((a0) => [...a0, generateEmptyPollAnswer()]);
}
}, [canAddMoreAnswers]);
const callback10 = useCallback((a0) => {
let c27042_0 = a0;
if (env18789[17]) {
const length = env18789[5].length;
(0, env18789[19])(env18789[4], a0);
(0, env18789[6])((a0) => {
const r1 = [...a0];
r1.splice(c27042_0, 1);
return r1;
});
const r14 = env18789[2];
if (r14 != null) {
r14({
indexToRemove: a0,
numberOfAnswers: length
});
}
}
}, [answers.length, canRemoveMoreAnswers, id, a2, callback5]);
useEffect(() => () => {
removeAllPollUploadAttachments(env18789[4]);
}, [id]);
const callback11 = useCallback(() => {
let c27043_0 = true;
const r6 = {};
let c27043_1 = r6;
if (env18789[7].trim().length === 0) {
c27043_0 = false;
r6.question = intl.string(t.gPX3oI);
}
const r25 = env18789[5];
if (r25.filter((item) => isAnswerFilled(item)).length < MIN_NUMBER_OF_ANSWERS_PER_POLL) {
c27043_0 = false;
r6[`answer-${r25[0].localCreationAnswerId}`] = intl.string(t.fYvzEX);
}
r25.forEach((item) => {
if (isIncompleteAnswer(item)) {
c27043_0 = false;
c27043_1[`answer-${item.localCreationAnswerId}`] = intl.string(t["8Qqkc+"]);
}
});
(0, env18789[11])(r6);
(0, env18789[12])(!c27043_0);
return c27043_0;
}, [answers, question]);
env18789[20] = callback11;
const callback12 = useCallback(async () => {
await (0, env18789[14])({
channel: env18789[0],
question: env18789[7],
answers: env18789[13],
allowMultiSelect: env18789[9],
duration: env18789[10],
layout: PollLayoutTypes.DEFAULT,
onClose: env18789[1]
});
}, [question, r35, allowMultiSelect, duration, r34, a0, a1]);
env18789[21] = callback12;
return {
answers,
question,
setQuestion,
allowMultiSelect,
setAllowMultiSelect,
duration,
setDuration,
canPost,
canAddMoreAnswers,
canRemoveMoreAnswers,
handleQuestionChange: callback3,
handleAnswerTextChange: callback2,
handleGifSelect: callback,
handleEmojiSelect: callback7,
handleCustomUpload: callback6,
handleAddAnswer: callback9,
handleRemoveAnswer: callback10,
handleRemoveAnswerImage: callback8,
fieldErrors,
createPoll: callback12,
handleSubmitPoll: useCallback(() => {
const r3 = env18789[15];
if (r3 ? !r3 : (0, env18789[20])()) {
(0, env18789[21])();
}
}, [callback12, loading, callback11]),
submitting: loading,
createPollError: error,
shouldFocusOnInvalidField,
setShouldFocusOnInvalidField
};
};