@highloop/feedback-internal
Version:
95 lines (86 loc) • 2.72 kB
text/typescript
import createFetch from 'fetch-retry';
import type { IData } from '../interfaces/data';
let fetch = createFetch(window.fetch);
let defaultEndpoint = 'https://widget.onhighloop.com';
let defaultErrorText = 'Could not fetch widget';
export let sdk = {
getWidget: async (
id: string,
opts: { api?: string }
): Promise<{ data?: IData; error?: { message: string } }> => {
try {
let res = await fetch((opts.api || defaultEndpoint) + `/feedback/${id}`);
if (!res.ok) {
let error = await res.json();
return { data: null, error: { message: error.message || defaultErrorText } };
}
let data = await res.json();
return { data };
} catch (e) {
return { data: null, error: { message: defaultErrorText } };
}
},
createSubmission: async (
id: string,
data: {
text?: string;
path?: string;
meta?: string;
optionId?: string;
stars?: number;
screenshot?: string;
},
opts: { api?: string }
): Promise<{ data?: { id: string; updateToken?: string }; error?: { message: string } }> => {
try {
let res = await fetch(
(opts.api || defaultEndpoint) + `/feedback/${id}/submit?includeUpdateToken=true`,
{
method: 'post',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
}
);
if (!res.ok) {
let error = await res.json();
return { data: null, error: { message: error.message || defaultErrorText } };
}
let resData = await res.json();
return { data: resData };
} catch (e) {
return { data: null, error: { message: defaultErrorText } };
}
},
updateSubmission: async (
id: string,
data: {
updateToken: string;
text?: string;
optionId?: string;
stars?: number;
finish?: boolean;
screenshot?: string;
},
opts: { api?: string }
): Promise<{ data?: { id: string; updateToken?: string }; error?: { message: string } }> => {
try {
let res = await fetch((opts.api || defaultEndpoint) + `/feedback/${id}/update`, {
method: 'put',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(data)
});
if (!res.ok) {
let error = await res.json();
return { data: null, error: { message: error.message || defaultErrorText } };
}
let resData = await res.json();
return { data: resData };
} catch (e) {
return { data: null, error: { message: defaultErrorText } };
}
}
};