44 |
45 |
Schedule | SocialCue
46 |
47 |
48 | setNewPost(slot.start)}
60 | onDrillDown={(date) => setNewPost(date)}
61 | onSelectEvent={(event) => setPostToUpdate(event)}
62 | views={['month']}
63 | />
64 |
65 |
66 |
setNewPost(null)}
70 | onAddPostSuccess={(result) => {
71 | toast.success(result.message);
72 | setEvents([
73 | ...events,
74 | {
75 | ...result.data,
76 | start: result.data.publishAt,
77 | end: result.data.publishAt
78 | }
79 | ]);
80 | setNewPost(null);
81 | }}
82 | onAddPostError={(err) => toast.error(err)}
83 | providers={providers}
84 | campaigns={campaigns}
85 | />
86 |
87 | setPostToUpdate(null)}
89 | onUpdatePostSuccess={(result) => {
90 | toast.success(result.message);
91 | setEvents(
92 | events.map((event) => {
93 | if (event.id === result.data.id) {
94 | return {
95 | ...result.data,
96 | start: result.data.publishAt,
97 | end: result.data.publishAt
98 | };
99 | }
100 | return event;
101 | })
102 | );
103 |
104 | setPostToUpdate(null);
105 | }}
106 | onUpdatePostError={(err) => toast.error(err)}
107 | onDeletePostSuccess={(result) => {
108 | toast.success(result.message);
109 | setEvents(events.filter((event) => event.id !== postToUpdate.id));
110 | setPostToUpdate(null);
111 | }}
112 | onDeletePostError={(err) => toast.error(err)}
113 | providers={providers}
114 | campaigns={campaigns}
115 | post={postToUpdate}
116 | />
117 |
118 | );
119 | };
120 |
121 | export default Index;
122 |
--------------------------------------------------------------------------------
/pages/providers.tsx:
--------------------------------------------------------------------------------
1 | import { ChatAlt2Icon } from '@heroicons/react/outline';
2 | import { GetServerSideProps } from 'next';
3 | import Head from 'next/head';
4 | import Image from 'next/image';
5 | import { useState } from 'react';
6 | import toast from 'react-hot-toast';
7 | import { useMutation } from 'react-query';
8 | import AddProviderModal from '../components/AddProviderModal';
9 | import ResourceAction from '../components/ResourceAction';
10 | import ResourceCard from '../components/ResourceCard';
11 | import UpdateProviderModal from '../components/UpdateProviderModal';
12 | import { providerOptions } from '../lib/providers';
13 | import { prisma } from './../db';
14 |
15 | export const getServerSideProps: GetServerSideProps = async () => {
16 | const providers = await prisma.provider.findMany();
17 | return {
18 | props: {
19 | providers: JSON.parse(JSON.stringify(providers))
20 | }
21 | };
22 | };
23 |
24 | const Providers = ({ providers }) => {
25 | const [socialProviders, setSocialProviders] = useState(providers);
26 | const [addProviderOpen, setAddProviderOpen] = useState(false);
27 | const [providerToEdit, setProviderToEdit] = useState(null);
28 |
29 | const deleteProviderMutation = useMutation(
30 | 'deleteProvider',
31 | async ({ id }: { id: string }) => {
32 | try {
33 | const response = await fetch(`./api/providers/${id}`, {
34 | method: 'DELETE'
35 | });
36 |
37 | if (!response.ok) {
38 | throw new Error('Something went wrong');
39 | }
40 |
41 | return await response.json();
42 | } catch (err) {
43 | throw new Error(err);
44 | }
45 | },
46 | {
47 | onSuccess: (result) => {
48 | toast.success(result.message);
49 | setSocialProviders(
50 | socialProviders.filter((provider) => provider.id !== result.data.id)
51 | );
52 | setAddProviderOpen(false);
53 | },
54 | onError: (err: { message: string }) => {
55 | toast.error(err.message);
56 | }
57 | }
58 | );
59 |
60 | return (
61 |