@told.club/sdk-rn
Version:
Told React Native SDK
77 lines (66 loc) • 2.04 kB
text/typescript
import AsyncStorage from '@react-native-async-storage/async-storage';
import type { SurveyReplied } from './__generated__/graphql';
interface ToldSurveyData {
surveyId: string;
seenCount: number;
replied: number;
date: string | undefined;
}
let surveyData: ToldSurveyData[] = [];
const storageKey = 'ToldSurveyData';
export async function loadSurveyData() {
const data = await AsyncStorage.getItem(storageKey);
if (data) surveyData = JSON.parse(data) as ToldSurveyData[];
}
export function getRepliedSurvey(): SurveyReplied[] {
return surveyData
.filter((data) => data.replied > 0)
.map((data) => ({
surveyId: data.surveyId,
date: data.date,
replied: data.replied > 0,
}));
}
export function setSeen(surveyId: string) {
const actualData = surveyData.find((data) => data.surveyId === surveyId);
if (actualData) {
// If the survey is already seen, increment the seenCount
actualData.seenCount += 1;
} else {
// If the survey is not seen, add it to the list
surveyData.push({
surveyId,
seenCount: 1,
replied: 0,
date: undefined,
});
}
AsyncStorage.setItem(storageKey, JSON.stringify(surveyData));
}
export function setReplied(surveyId: string) {
const actualData = surveyData.find((data) => data.surveyId === surveyId);
if (actualData) {
// If the survey is already seen, increment the replied
actualData.replied += 1;
actualData.date = new Date().toISOString();
} else {
// If the survey is not seen, add it to the list
surveyData.push({
surveyId,
seenCount: 0,
replied: 1,
date: new Date().toISOString(),
});
}
AsyncStorage.setItem(storageKey, JSON.stringify(surveyData));
}
export function isSeen(surveyId: string): boolean {
return surveyData.some(
(data) => data.surveyId === surveyId && data.seenCount > 0
);
}
export function isReplied(surveyId: string): boolean {
return surveyData.some(
(data) => data.surveyId === surveyId && data.replied > 0
);
}