File "LearningModeData.js"

Full Path: /home/bytebmoc/tideswithin.com/themes/LearningMode/LearningModeData.js
File size: 2.87 KB
MIME-type: text/x-java
Charset: utf-8

import {create} from 'zustand';
import * as rsssl_api from "../../utils/api";

const UseLearningMode = create(( set, get ) => ({
    learningModeData: [],
    dataLoaded: false,
    fetchLearningModeData: async (type) => {
        let data = {};
        data.type = type;
        data.lm_action = 'get';
        let learningModeData = await rsssl_api.doAction('learning_mode_data', data).then((response) => {
            return response;
        })

        if ( typeof learningModeData === 'object' && learningModeData.request_success === true ) {
            learningModeData = Object.values(learningModeData);
        }

        if ( !Array.isArray(learningModeData) ) {
            learningModeData = [];
        }
        set({
            learningModeData: learningModeData,
            dataLoaded:true,
        });
    },
    updateStatus: async (enabled, updateItem, type) => {
        let learningModeData = get().learningModeData;
        let data = {};
        data.type = type;
        data.updateItemId = updateItem.id;
        data.enabled = enabled==1 ? 0 : 1;
        data.lm_action = 'update';

        //for fast UX feel, update the state before we post
        for (const item of learningModeData){
            if (updateItem.id === item.id && item.status) {
                item.status = data.enabled;
            }
        }
        set({
            learningModeData: learningModeData,
        });
        learningModeData = await rsssl_api.doAction('learning_mode_data', data).then((response) => {
            return response;
        })
        if ( typeof learningModeData === 'object' ) {
            learningModeData = Object.values(learningModeData);
        }
        if ( !Array.isArray(learningModeData) ) {
            learningModeData = [];
        }
        set({
            learningModeData: learningModeData,
            dataLoaded:true,
        });
    },
    deleteData: async (deleteItem, type) => {
        let learningModeData = get().learningModeData;

        let data = {};
        data.type = type;
        data.updateItemId = deleteItem.id;
        data.lm_action = 'delete';
        //for fast UX feel, update the state before we post
        learningModeData.forEach(function(item, i) {
            if (item.id === deleteItem.id) {
                learningModeData.splice(i, 1);
            }
        });
        set({
            learningModeData: learningModeData,
        });
        learningModeData = await rsssl_api.doAction('learning_mode_data', data).then((response) => {
            return response;
        })
        if ( typeof learningModeData === 'object' ) {
            learningModeData = Object.values(learningModeData);
        }
        if ( !Array.isArray(learningModeData) ) {
            learningModeData = [];
        }
        set({
            learningModeData: learningModeData,
            dataLoaded:true,
        });
    },

}));

export default UseLearningMode;