mirror of
https://github.com/wassname/talk.git
synced 2026-07-08 15:45:09 +08:00
04c56b3fb5
* feat: added preload config * feat: support changing locale * fix: name case * fix: removed unused code * feat: added translations for default reactions * fix: do not translate icon * fix: shorter i18n keys
139 lines
3.4 KiB
TypeScript
139 lines
3.4 KiB
TypeScript
import React, { Component } from "react";
|
|
|
|
import { LanguageCode } from "coral-common/helpers/i18n";
|
|
import { InstallInput } from "coral-framework/rest";
|
|
|
|
import { InstallMutation, withInstallMutation } from "./InstallMutation";
|
|
import AddOrganizationStep from "./steps/AddOrganizationStep";
|
|
import CreateYourAccountStep from "./steps/CreateYourAccountStep";
|
|
import FinalStep from "./steps/FinalStep";
|
|
import InitialStep from "./steps/InitialStep";
|
|
import PermittedDomainsStep from "./steps/PermittedDomainsStep";
|
|
import SelectLanguageStep from "./steps/SelectLanguageStep";
|
|
import Wizard from "./Wizard";
|
|
|
|
interface FormData {
|
|
organizationName: string;
|
|
organizationContactEmail: string;
|
|
organizationURL: string;
|
|
email: string;
|
|
username: string;
|
|
password: string;
|
|
confirmPassword: string;
|
|
allowedDomains: string[];
|
|
locale: LanguageCode;
|
|
}
|
|
|
|
interface InstallWizardState {
|
|
step: number;
|
|
data: FormData;
|
|
}
|
|
|
|
function shapeFinalData(data: FormData): InstallInput {
|
|
const {
|
|
organizationName,
|
|
organizationContactEmail,
|
|
organizationURL,
|
|
allowedDomains,
|
|
username,
|
|
password,
|
|
email,
|
|
locale,
|
|
} = data;
|
|
|
|
return {
|
|
tenant: {
|
|
organization: {
|
|
name: organizationName,
|
|
contactEmail: organizationContactEmail,
|
|
url: organizationURL,
|
|
},
|
|
allowedDomains,
|
|
locale,
|
|
},
|
|
user: {
|
|
username,
|
|
password,
|
|
email,
|
|
},
|
|
};
|
|
}
|
|
|
|
interface Props {
|
|
install: InstallMutation;
|
|
}
|
|
|
|
class InstallWizard extends Component<Props, InstallWizardState> {
|
|
public state = {
|
|
step: 0,
|
|
data: {
|
|
organizationContactEmail: "",
|
|
organizationName: "",
|
|
organizationURL: "",
|
|
email: "",
|
|
username: "",
|
|
password: "",
|
|
confirmPassword: "",
|
|
allowedDomains: [],
|
|
locale: "en-US" as LanguageCode,
|
|
},
|
|
};
|
|
|
|
private handleSaveData = (newData: FormData) => {
|
|
this.setState(({ data }) => ({
|
|
data: { ...data, ...newData },
|
|
}));
|
|
};
|
|
|
|
private handleGoToNextStep = () =>
|
|
this.setState(({ step }) => ({
|
|
step: step + 1,
|
|
}));
|
|
|
|
private handleGoToPreviousStep = () =>
|
|
this.setState(({ step }) => ({
|
|
step: step - 1,
|
|
}));
|
|
|
|
private handleInstall = async (newData: Partial<FormData>) => {
|
|
return await this.props.install(
|
|
shapeFinalData({ ...this.state.data, ...newData })
|
|
);
|
|
};
|
|
|
|
public render() {
|
|
return (
|
|
<Wizard currentStep={this.state.step}>
|
|
<InitialStep onGoToNextStep={this.handleGoToNextStep} />
|
|
<SelectLanguageStep
|
|
data={this.state.data}
|
|
onSaveData={this.handleSaveData}
|
|
onGoToNextStep={this.handleGoToNextStep}
|
|
onGoToPreviousStep={this.handleGoToPreviousStep}
|
|
/>
|
|
<CreateYourAccountStep
|
|
data={this.state.data}
|
|
onSaveData={this.handleSaveData}
|
|
onGoToNextStep={this.handleGoToNextStep}
|
|
onGoToPreviousStep={this.handleGoToPreviousStep}
|
|
/>
|
|
<AddOrganizationStep
|
|
data={this.state.data}
|
|
onSaveData={this.handleSaveData}
|
|
onGoToNextStep={this.handleGoToNextStep}
|
|
onGoToPreviousStep={this.handleGoToPreviousStep}
|
|
/>
|
|
<PermittedDomainsStep
|
|
data={this.state.data}
|
|
onGoToNextStep={this.handleGoToNextStep}
|
|
onGoToPreviousStep={this.handleGoToPreviousStep}
|
|
onInstall={this.handleInstall}
|
|
/>
|
|
<FinalStep />
|
|
</Wizard>
|
|
);
|
|
}
|
|
}
|
|
|
|
export default withInstallMutation(InstallWizard);
|