Reactive-Resume/client/store/sagas/sync.ts

35 lines
767 B
TypeScript

import { Resume } from '@reactive-resume/schema';
import debounce from 'lodash/debounce';
import { select, takeLatest } from 'redux-saga/effects';
import { updateResume } from '@/services/resume';
import {
addItem,
addSection,
deleteItem,
deleteSection,
duplicateItem,
editItem,
setResumeState,
} from '../resume/resumeSlice';
const DEBOUNCE_WAIT = 1000;
const debouncedSync = debounce((resume: Resume) => updateResume(resume), DEBOUNCE_WAIT);
function* handleSync() {
const resume: Resume = yield select((state) => state.resume);
debouncedSync(resume);
}
function* syncSaga() {
yield takeLatest(
[setResumeState, addItem, editItem, duplicateItem, deleteItem, addSection, deleteSection],
handleSync
);
}
export default syncSaga;