events-api.ts 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. import { request } from '../../../utils';
  2. import { API } from '../../../types';
  3. import { ResponseType } from '../response-type';
  4. import { AxiosRequestConfig } from 'axios';
  5. export interface PostGetEventsListReturn extends ResponseType {
  6. data: SingleEvent[];
  7. }
  8. export type SingleEvent = {
  9. id: number;
  10. active: 0 | 1;
  11. full: 0 | 1;
  12. name: string;
  13. url: string;
  14. date: string;
  15. date_from: string;
  16. date_to: string;
  17. address1: string;
  18. location: string;
  19. capacity?: number;
  20. participants?: number;
  21. registrations_info: 1 | 2 | 3 | 4 | 5;
  22. type: 1 | 2 | 3;
  23. photo: 0 | 1;
  24. available?: number;
  25. joined: 0 | 1;
  26. visible?: 0 | 1;
  27. archived: 0 | 1;
  28. time?: string;
  29. time_from?: string;
  30. time_to?: string;
  31. };
  32. export type Participants = {
  33. uid: number;
  34. name: string;
  35. avatar: string | null;
  36. flag: string | null;
  37. };
  38. export type EventSettings = {
  39. name: string;
  40. url: string;
  41. date: string;
  42. date_from: string;
  43. date_to: string;
  44. address1: string;
  45. location: string;
  46. capacity: number;
  47. type: 1 | 2 | 3;
  48. registrations_info: 1 | 2 | 3 | 4 | 5;
  49. address2: string;
  50. details: string;
  51. free: 0 | 1;
  52. host: string;
  53. host_profile: number | null;
  54. price: string;
  55. shop_url: string;
  56. chat_token: string | null;
  57. all_participants_visible: 0 | 1;
  58. participants_can_add_photos: 0 | 1 | null;
  59. participants_can_add_files: 0 | 1 | null;
  60. host_data: {
  61. first_name: string;
  62. last_name: string;
  63. avatar: string | null;
  64. nm: number | null;
  65. un: number | null;
  66. };
  67. nm_region?: number;
  68. };
  69. export type EventAttachments = {
  70. id: number;
  71. filename: string;
  72. filetype: string;
  73. description: string;
  74. data: 0 | 1;
  75. preview: 0 | 1;
  76. type: 1 | 2 | 3;
  77. };
  78. export type EventPhotos = {
  79. id: number;
  80. filetype: string;
  81. data: 0 | 1;
  82. preview: 0 | 1;
  83. uid: number;
  84. name: string;
  85. avatar: string | null;
  86. };
  87. export type EventData = SingleEvent & {
  88. event_chat: string | null;
  89. settings: EventSettings;
  90. participants_data: Participants[];
  91. joined: 0 | 1;
  92. attachments: EventAttachments[];
  93. files: EventAttachments[];
  94. photos: EventPhotos[];
  95. user_id: number | boolean;
  96. photo_available: 0 | 1;
  97. photo_main: 0 | 1;
  98. photos_left: number;
  99. };
  100. export interface PostGetEventReturn extends ResponseType {
  101. data: EventData;
  102. }
  103. export interface PostGetMorePhotosReturn extends ResponseType {
  104. photos: EventPhotos[];
  105. photos_left: number;
  106. }
  107. export interface PostUploadTempFileReturn extends ResponseType {
  108. filetype: string;
  109. name: string;
  110. temp_name: string;
  111. }
  112. export interface PostGetCanAddEventReturn extends ResponseType {
  113. can: boolean;
  114. }
  115. export interface PostGetPhotosForRegionReturn extends ResponseType {
  116. photos: number[];
  117. }
  118. export interface PostGetEventForEditingReturn {
  119. address1: string;
  120. address2: string;
  121. capacity: number | null;
  122. date: string;
  123. details: string;
  124. lat: number | null;
  125. lon: number;
  126. region: number;
  127. time_from: string;
  128. time_to: string;
  129. title: string;
  130. result: string;
  131. }
  132. export interface PostJoinEvent {
  133. token: string;
  134. id: number;
  135. }
  136. export interface PostUploadTemp {
  137. token: string;
  138. file: {
  139. type: string;
  140. uri: string;
  141. name: string;
  142. };
  143. }
  144. export interface PostUploadPhoto {
  145. token: string;
  146. event_id: number;
  147. file: {
  148. type: string;
  149. uri: string;
  150. name: string;
  151. };
  152. }
  153. export interface PostEventAddFile {
  154. token: string;
  155. type: 1 | 2 | 3;
  156. description: string;
  157. event_id: number;
  158. filetype: string;
  159. filename: string;
  160. temp_filename: string;
  161. }
  162. export interface PostDeleteFile {
  163. token: string;
  164. id: number;
  165. event_id: number;
  166. }
  167. export interface PostAddEvent {
  168. token: string;
  169. event: any;
  170. }
  171. export interface PostUpdateEvent {
  172. token: string;
  173. event_id: number;
  174. event: any;
  175. }
  176. export const eventsApi = {
  177. getEventsList: (token: string, past: number) =>
  178. request.postForm<PostGetEventsListReturn>(API.GET_EVENTS_LIST, { token, past }),
  179. getEvent: (token: string, url: string) =>
  180. request.postForm<PostGetEventReturn>(API.GET_EVENT, { token, url }),
  181. joinEvent: (data: PostJoinEvent) => request.postForm<ResponseType>(API.JOIN_EVENT, data),
  182. unjoinEvent: (data: PostJoinEvent) => request.postForm<ResponseType>(API.UNJOIN_EVENT, data),
  183. uploadTempFile: (data: PostUploadTemp, config?: AxiosRequestConfig) => {
  184. const formData = new FormData();
  185. formData.append('token', data.token);
  186. formData.append('file', {
  187. ...data.file
  188. } as unknown as Blob);
  189. return request.postForm<PostUploadTempFileReturn>(API.UPLOAD_TEMP_FILE, formData, {
  190. ...config
  191. });
  192. },
  193. eventAddFile: (data: PostEventAddFile) =>
  194. request.postForm<ResponseType>(API.EVENT_ADD_FILE, data),
  195. deleteFile: (data: PostDeleteFile) => request.postForm<ResponseType>(API.DELETE_FILE, data),
  196. uploadPhoto: (data: PostUploadPhoto, config?: AxiosRequestConfig) => {
  197. const formData = new FormData();
  198. formData.append('token', data.token);
  199. formData.append('event_id', JSON.stringify(data.event_id));
  200. formData.append('file', {
  201. ...data.file
  202. } as unknown as Blob);
  203. return request.postForm<PostUploadTempFileReturn>(API.UPLOAD_PHOTO_EVENT, formData, {
  204. ...config
  205. });
  206. },
  207. getMorePhotos: (token: string, event_id: number, last_id: number) =>
  208. request.postForm<PostGetMorePhotosReturn>(API.GET_MORE_PHOTOS, { token, event_id, last_id }),
  209. canAddEvent: (token: string) =>
  210. request.postForm<PostGetCanAddEventReturn>(API.CAN_ADD_EVENT, { token }),
  211. getPhotosForRegion: (region_id: number) =>
  212. request.postForm<PostGetPhotosForRegionReturn>(API.GET_PHOTOS_FOR_REGION, { region_id }),
  213. addEvent: (data: PostAddEvent) => request.postForm<ResponseType>(API.ADD_EVENT, data),
  214. getEventForEditing: (token: string, event_id: number) =>
  215. request.postForm<PostGetEventForEditingReturn>(API.GET_EVENT_FOR_EDITING, { token, event_id }),
  216. updateEvent: (data: PostUpdateEvent) => request.postForm<ResponseType>(API.UPDATE_EVENT, data),
  217. cancelEvent: (token: string, event_id: number) =>
  218. request.postForm<ResponseType>(API.CANCEL_EVENT, { token, event_id })
  219. };