5180 fichiers 38.5 Mo 0 téléchargements 370 vues mis à jour il y a 7 heures ui
nitro-v36-with-renderer-v36 / src / components / room / widgets / wired-contract / WiredContractWidgetView.tsx
WiredContractWidgetView.tsx 2.6 Ko Télécharger le fichier
import { FC, useEffect } from 'react';
import { LocalizeText, NotificationAlertType } from '../../../../api';
import { useNotification } from '../../../../hooks';
import { saveWiredContract, useWiredContractEvents, useWiredContractStore } from '../../../../hooks/rooms/widgets/useWiredContractState';
import { useWiredToolsState } from '../../../../hooks/wired-tools';
import { WiredContractEditorView } from './WiredContractEditorView';
import { WiredContractElementEditorView } from './WiredContractElementEditorView';

/**
 * The official contract editor (AIR WiredContractController): the server opens it when a payment, trade or reward
 * contract is used; it fetches the contract, edits it in its own window and saves it with its own packet.
 */
export const WiredContractWidgetView: FC<{}> = () =>
{
    useWiredContractEvents();

    const contents = useWiredContractStore(state => state.contents);
    const generation = useWiredContractStore(state => state.generation);
    const saving = useWiredContractStore(state => state.saving);
    const errorKey = useWiredContractStore(state => state.errorKey);
    const close = useWiredContractStore(state => state.close);
    // AIR footerPreset.saveButtonDisabled = !wiredMenu.hasWritePermission.
    const { roomSettings } = useWiredToolsState();
    const canWrite = !!roomSettings?.canModify;
    const { simpleAlert } = useNotification();

    // AIR shows a refused save (and a refused element) as an alert titled ${wiredfurni.error.title}.
    useEffect(() =>
    {
        if(!errorKey) return;

        useWiredContractStore.getState().clearError();
        simpleAlert(LocalizeText(errorKey), NotificationAlertType.DEFAULT, null, null, LocalizeText('wiredfurni.error.title'));
    }, [ errorKey, simpleAlert ]);

    if(!contents) return null;

    return (
        <WiredContractEditorView
            key={ `${ contents.contractId }:${ generation }` }
            contents={ contents }
            canWrite={ canWrite }
            saving={ saving }
            onClose={ close }
            onSave={ draft => canWrite && saveWiredContract(draft) }
            renderElementEditor={ (target, initial, apply, closeElement) =>
                <WiredContractElementEditorView
                    key={ `${ target.side }:${ target.rule }:${ target.node }` }
                    initial={ initial }
                    canWrite={ canWrite && !saving }
                    onSave={ apply }
                    onClose={ closeElement }
                    onInvalid={ message => simpleAlert(message, NotificationAlertType.DEFAULT, null, null, LocalizeText('wiredfurni.error.title')) } /> } />
    );
};
15Sujets
1Dépôts
20Membres
3En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser