Proyectos de Subversion LeadersLinked - SPA

Rev

Autoría | Ultima modificación | Ver Log |

import { useState, useEffect } from 'react';
import { useApi, useAlert } from '@shared/hooks';
import { getPrivacySettings, updatePrivacySettings } from '@account-settings/services';

const PRIVACY_OPTIONS = [
  {
    label: 'Mostrar en la búsqueda',
    input_name: 'show_in_search',
    value: false
  }
];

export function usePrivacySettings() {
  const { showSuccess, showError } = useAlert();
  const [options, setOptions] = useState(PRIVACY_OPTIONS);

  const { loading: isLoading, execute: fetchSettings } = useApi(getPrivacySettings, {
    autoFetch: true,
    onSuccess: (response) => {
      if (response.success && response.data) {
        Object.entries(response.data).forEach(([key, value]) => {
          setOptions((prevOptions) =>
            prevOptions.map((option) =>
              option.input_name === key ? { ...option, value: Boolean(value) } : option
            )
          );
        });
      }
    },
    onError: (error) => {
      showError(error.message || 'Error al cargar las configuraciones de privacidad');
    }
  });

  const { loading: isUpdating, execute: executeUpdate } = useApi(updatePrivacySettings, {
    onSuccess: (response) => {
      if (response.success) {
        showSuccess(response.data);
      } else {
        showError(response.data || 'Error al actualizar la privacidad');
      }
    },
    onError: (error) => {
      showError(error.message || 'Error al actualizar la privacidad');
    }
  });

  const handleChecked = (value, inputName) => {
    setOptions((prevOptions) =>
      prevOptions.map((option) =>
        option.input_name === inputName ? { ...option, value: Boolean(value) } : option
      )
    );
  };

  const updateSettings = async () => {
    const settingsData = {};
    options.forEach(({ input_name, value }) => {
      settingsData[input_name] = value;
    });
    await executeUpdate(settingsData);
  };

  return {
    options,
    isLoading,
    isUpdating,
    handleChecked,
    updateSettings
  };
}