{"version":3,"file":"static/components/5176-a7545793763e67f7.mjs?cv=7","sources":["webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/groups/components/utils/api.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/forms.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/time.js"],"sourcesContent":["import querystring from \"query-string\";\nimport axios from \"@agir/lib/utils/axios\";\nimport { objectToFormData } from \"@agir/lib/utils/forms\";\nimport useSWR from \"swr\";\n\nexport const API_GROUP_PREFIX = \"/api/groupes/\";\n\nexport const ENDPOINT = {\n  getUserGroups: API_GROUP_PREFIX,\n  getGroup: `${API_GROUP_PREFIX}:groupPk/`,\n  getGroupSuggestions: `${API_GROUP_PREFIX}:groupPk/suggestions/`,\n\n  joinGroup: `${API_GROUP_PREFIX}:groupPk/rejoindre/`,\n  followGroup: `${API_GROUP_PREFIX}:groupPk/suivre/`,\n  updateOwnMembership: `${API_GROUP_PREFIX}:groupPk/membre/`,\n  quitGroup: `${API_GROUP_PREFIX}:groupPk/quitter/`,\n\n  getUpcomingEvents: `${API_GROUP_PREFIX}:groupPk/evenements/a-venir/`,\n  getPastEvents: `${API_GROUP_PREFIX}:groupPk/evenements/passes/?page=:page&page_size=:pageSize`,\n  getPastEventReports: `${API_GROUP_PREFIX}:groupPk/evenements/compte-rendus/`,\n\n  getEventsJoinedByGroup: `${API_GROUP_PREFIX}:groupPk/evenements-rejoints/`,\n\n  getMessages: `${API_GROUP_PREFIX}:groupPk/messages/?page=:page&page_size=:pageSize`,\n  getMessage: `${API_GROUP_PREFIX}messages/:messagePk/`,\n\n  createMessage: `${API_GROUP_PREFIX}:groupPk/messages/`,\n  createPrivateMessage: `${API_GROUP_PREFIX}:groupPk/envoi-message-prive/`,\n  updateMessage: `${API_GROUP_PREFIX}messages/:messagePk/`,\n  deleteMessage: `${API_GROUP_PREFIX}messages/:messagePk/`,\n  messageNotification: `${API_GROUP_PREFIX}messages/notification/:messagePk/`,\n  messageLocked: `${API_GROUP_PREFIX}messages/verrouillage/:messagePk/`,\n  messageParticipants: `${API_GROUP_PREFIX}messages/:messagePk/participants/`,\n\n  getComments: `${API_GROUP_PREFIX}messages/:messagePk/comments/`,\n  createComment: `${API_GROUP_PREFIX}messages/:messagePk/comments/`,\n  deleteComment: `${API_GROUP_PREFIX}messages/comments/:commentPk/`,\n  setAllMessagesRead: `/api/messages/all-read/`,\n\n  getMembers: `${API_GROUP_PREFIX}:groupPk/membres/`,\n  updateGroup: `${API_GROUP_PREFIX}:groupPk/update/`,\n  inviteToGroup: `${API_GROUP_PREFIX}:groupPk/invitation/`,\n  getMemberPersonalInformation: `${API_GROUP_PREFIX}membres/:memberPk/informations/`,\n  updateMember: `${API_GROUP_PREFIX}membres/:memberPk/`,\n  getFinance: `${API_GROUP_PREFIX}:groupPk/finance/`,\n\n  report: `/api/report/`,\n\n  createGroupExternalLink: `${API_GROUP_PREFIX}:groupPk/link/`,\n  groupExternalLink: `${API_GROUP_PREFIX}:groupPk/link/:linkPk/`,\n\n  searchGroups: `${API_GROUP_PREFIX}recherche/`,\n  geoSearchGroups: `${API_GROUP_PREFIX}recherche/geo/`,\n\n  getStatistics: `${API_GROUP_PREFIX}:groupPk/stats/`,\n};\n\nexport const useMembershipRemoveRequestById = (requestId) =>\n  useSWR(\n    requestId ? `/api/groupes/request-membership-remove/${requestId}` : null,\n  );\n\nexport const useRemoveMembershipRequestByGroup = (groupId) => {\n  return useSWR(`/api/groupes/${groupId}/request-membership-remove`);\n};\n\nexport const createRemoveMembershipRequest = async (\n  groupId,\n  memberId,\n  details,\n  reason,\n) =>\n  axios.post(`/api/groupes/request-membership-remove/`, {\n    supportgroupId: groupId,\n    personId: memberId,\n    details,\n    reason: reason,\n  });\n\nexport const useMembershipRemoveRequestRefuse = (requestId) =>\n  axios.patch(`/api/groupes/request-membership-remove/${requestId}/refuse`);\n\nexport const useMembershipRemoveRequestValidate = (requestId) =>\n  axios.patch(`/api/groupes/request-membership-remove/${requestId}/validate`);\n\nexport const appendQueryParams = (\n  endpoint,\n  opt = { params: null, querystringParams: null },\n) => {\n  if (opt?.params) {\n    Object.entries(opt.params).forEach(([key, value]) => {\n      endpoint = endpoint.replace(`:${key}`, value);\n    });\n  }\n\n  if (opt?.querystringParams) {\n    endpoint += `?${querystring.stringify(opt.querystringParams, {\n      arrayFormat: \"comma\",\n    })}`;\n  }\n\n  return endpoint;\n};\n\nexport const getGroupEndpoint = (key, params, querystringParams) => {\n  let endpoint = ENDPOINT[key] || key;\n\n  return appendQueryParams(endpoint, { params, querystringParams });\n};\n\nexport const formatMessage = (message) => {\n  const data = {\n    ...message,\n    linkedEvent: (message.linkedEvent && message.linkedEvent.id) || null,\n  };\n\n  if (data.attachment && typeof data.attachment.file === \"string\") {\n    data.attachment = undefined;\n  }\n\n  return data.attachment\n    ? objectToFormData({\n        ...data,\n        attachmentCreate: data.attachment,\n        attachment: null,\n      })\n    : data;\n};\n\nexport const createMessage = async (groupPk, message) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"createMessage\", { groupPk });\n  const body = formatMessage(message);\n\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const createPrivateMessage = async (groupPk, message) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"createPrivateMessage\", { groupPk });\n  const body = formatMessage(message);\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const updateMessage = async (message) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"updateMessage\", { messagePk: message.id });\n  const body = formatMessage(message);\n  try {\n    const response = await axios.patch(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getMessageNotification = async (messagePk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"messageNotification\", {\n    messagePk,\n  });\n  try {\n    const response = await axios.get(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const updateMessageNotification = async (messagePk, isMuted) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"messageNotification\", {\n    messagePk,\n  });\n  try {\n    const response = await axios.put(url, { isMuted });\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const updateMessageLock = async (messagePk, isLocked) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"messageLocked\", {\n    messagePk,\n  });\n  try {\n    const response = await axios.put(url, { isLocked });\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const deleteMessage = async (message) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"deleteMessage\", { messagePk: message.id });\n  try {\n    const response = await axios.delete(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getMessageParticipants = async (messagePk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"messageParticipants\", { messagePk });\n  try {\n    const response = await axios.get(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const reportMessage = async (message) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"report\");\n  const body = {\n    object_id: message.id,\n    content_type: \"msgs.supportgroupmessage\",\n  };\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getComments = async (messagePk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"getComments\", { messagePk });\n  try {\n    const response = await axios.post(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const createComment = async (messagePk, data) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"createComment\", { messagePk });\n  const body = formatMessage(data);\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const deleteComment = async (comment) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"deleteComment\", { commentPk: comment.id });\n  try {\n    const response = await axios.delete(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const reportComment = async (comment) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"report\");\n  const body = {\n    object_id: comment.id,\n    content_type: \"msgs.supportgroupmessagecomment\",\n  };\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const joinGroup = async (groupPk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"joinGroup\", { groupPk });\n  try {\n    const response = await axios.post(url, {});\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const followGroup = async (groupPk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"followGroup\", { groupPk });\n  try {\n    const response = await axios.post(url, {});\n    result.data = response.data;\n  } catch (e) {\n    result.error = e?.response?.data || e.message;\n  }\n\n  return result;\n};\n\nexport const quitGroup = async (groupPk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"quitGroup\", { groupPk });\n  try {\n    const response = await axios.delete(url, {});\n    result.data = response.data;\n  } catch (e) {\n    result.error = e?.response?.data || e.message;\n  }\n\n  return result;\n};\n\nexport const updateGroup = async (groupPk, data) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"updateGroup\", { groupPk });\n  let headers = undefined;\n  let body = data;\n\n  if (body.image) {\n    body = new FormData();\n    Object.keys(data).forEach((e) => {\n      body.append(e, data[e]);\n    });\n  }\n\n  try {\n    const response = await axios.patch(url, body, { headers });\n    result.data = response.data;\n  } catch (e) {\n    if (e.response && e.response.data) {\n      result.error =\n        e.response.status === 400 && data.image\n          ? { image: \"La taille du fichier ne doit pas dépasser le 2.5 Mo\" }\n          : e.response.data;\n    } else {\n      result.error = e.message;\n    }\n  }\n\n  return result;\n};\n\nexport const inviteToGroup = async (groupPk, data) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"inviteToGroup\", { groupPk });\n\n  try {\n    const response = await axios.post(url, data);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const setAllMessagesRead = async () => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  try {\n    const response = await axios.get(ENDPOINT.setAllMessagesRead);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getMembers = async (groupPk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"getMembers\", { groupPk });\n  try {\n    const response = await axios.get(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getMemberPersonalInformation = async (memberPk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"getMemberPersonalInformation\", {\n    memberPk,\n  });\n  try {\n    const response = await axios.get(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const updateMember = async (memberPk, data) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"updateMember\", { memberPk });\n\n  try {\n    const response = await axios.patch(url, data);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const getFinance = async (groupPk) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"getFinance\", { groupPk });\n\n  try {\n    const response = await axios.get(url);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const createGroupLink = async (groupPk, body) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n\n  const url = getGroupEndpoint(\"createGroupExternalLink\", { groupPk });\n\n  try {\n    const response = await axios.post(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const updateGroupLink = async (groupPk, linkPk, body) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n\n  const url = getGroupEndpoint(\"groupExternalLink\", {\n    groupPk,\n    linkPk,\n  });\n\n  try {\n    const response = await axios.put(url, body);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const saveGroupLink = (groupPk, link) => {\n  const body = {\n    url: encodeURI(\n      link.url.includes(\"http\")\n        ? link.url.trim()\n        : `https://${link.url.trim()}`,\n    ),\n    label: link.label,\n  };\n  return link.id\n    ? updateGroupLink(groupPk, link.id, body)\n    : createGroupLink(groupPk, body);\n};\n\nexport const deleteGroupLink = async (groupPk, linkPk) => {\n  const result = {\n    success: false,\n    error: null,\n  };\n\n  const url = getGroupEndpoint(\"groupExternalLink\", { groupPk, linkPk });\n\n  try {\n    await axios.delete(url);\n    result.success = true;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n\nexport const searchGroups = async (searchTerms, params = {}) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"searchGroups\");\n  try {\n    const response = await axios.get(url, {\n      params: { ...params, q: searchTerms },\n    });\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || { global: e.message };\n  }\n\n  return result;\n};\n\nexport const updateOwnMembership = async (groupPk, data) => {\n  const result = {\n    data: null,\n    error: null,\n  };\n  const url = getGroupEndpoint(\"updateOwnMembership\", { groupPk });\n\n  try {\n    const response = await axios.patch(url, data);\n    result.data = response.data;\n  } catch (e) {\n    result.error = (e.response && e.response.data) || e.message;\n  }\n\n  return result;\n};\n","export const objectToFormData = (obj, rootName, ignoreList) => {\n  var formData = new FormData();\n  const appendFormData = (data, rootProp) => {\n    if (Array.isArray(ignoreList) && ignoreList.includes(rootProp)) {\n      return;\n    }\n\n    rootProp = rootProp || \"\";\n\n    if (data instanceof File) {\n      formData.append(rootProp, data);\n      return;\n    }\n\n    if (Array.isArray(data)) {\n      for (var i = 0; i < data.length; i++) {\n        appendFormData(data[i], rootProp + \"[\" + i + \"]\");\n      }\n      return;\n    }\n\n    if (typeof data === \"object\" && data) {\n      for (var key in data) {\n        if (data.hasOwnProperty(key)) {\n          if (rootProp === \"\") {\n            appendFormData(data[key], key);\n          } else {\n            appendFormData(data[key], rootProp + \".\" + key);\n          }\n        }\n      }\n      return;\n    }\n\n    if (data !== null && typeof data !== \"undefined\") {\n      formData.append(rootProp, data);\n    }\n  };\n\n  appendFormData(obj, rootName);\n\n  return formData;\n};\n","import { DateTime, Interval } from \"luxon\";\nimport { instanceOf } from \"prop-types\";\n\nconst HOUR_ONLY_FORMAT = {\n  hour: \"numeric\",\n  minute: \"2-digit\",\n};\n\nconst SAME_YEAR_FORMAT = {\n  weekday: \"long\",\n  month: \"long\",\n  day: \"numeric\",\n};\n\nconst OTHER_YEAR_FORMAT = {\n  year: \"numeric\",\n  month: \"long\",\n  day: \"numeric\",\n};\n\nexport function dateFromISOString(isostring, zone) {\n  return zone\n    ? DateTime.fromISO(isostring, { zone }).setLocale(\"fr\")\n    : DateTime.fromISO(isostring).setLocale(\"fr\");\n}\n\nexport function displayHumanDay(datetime, relativeTo, interval) {\n  if (!instanceOf(datetime, DateTime)) {\n    return datetime;\n  }\n\n  if (relativeTo === undefined) {\n    relativeTo = DateTime.local();\n  }\n\n  if (interval === undefined) {\n    interval =\n      relativeTo < datetime\n        ? Interval.fromDateTimes(relativeTo, datetime)\n        : Interval.fromDateTimes(datetime, relativeTo);\n  }\n\n  const calendarDays = interval.count(\"days\");\n\n  if (calendarDays <= 3) {\n    return datetime.toRelativeCalendar({\n      base: relativeTo,\n      unit: \"days\",\n    });\n  } else if (calendarDays <= 8) {\n    const calendarWeeks = interval.count(\"weeks\");\n    const qualifier =\n      relativeTo < datetime ? (calendarWeeks > 1 ? \"prochain\" : \"\") : \"dernier\";\n    return `${datetime.weekdayLong} ${qualifier}`.trim();\n  }\n\n  const format = {\n    weekday: \"long\",\n    month: \"long\",\n    day: \"numeric\",\n    year: datetime.year !== relativeTo.year ? \"numeric\" : undefined,\n  };\n\n  return datetime.toLocaleString(format);\n}\n\nexport function displayHumanDate(datetime, relativeTo) {\n  if (!instanceOf(datetime, DateTime)) {\n    return datetime;\n  }\n\n  if (relativeTo === undefined) {\n    relativeTo = DateTime.local();\n  }\n  const interval =\n    relativeTo < datetime\n      ? Interval.fromDateTimes(relativeTo, datetime)\n      : Interval.fromDateTimes(datetime, relativeTo);\n\n  const calendarDays = interval.count(\"days\");\n\n  const time = datetime.toLocaleString(HOUR_ONLY_FORMAT);\n  let date = \"\";\n\n  if (calendarDays <= 8) {\n    date = displayHumanDay(datetime, relativeTo, interval);\n  } else if (interval.count(\"months\") <= 4) {\n    date = datetime.toLocaleString(SAME_YEAR_FORMAT);\n  } else {\n    date = datetime.toLocaleString(OTHER_YEAR_FORMAT);\n  }\n\n  return `${date} à ${time}`;\n}\n\nexport const displayHumanDateString = (datetime, relativeTo) => {\n  datetime = computeDateToLuxon(datetime)\n\n  if (relativeTo) {\n    relativeTo = computeDateToLuxon(relativeTo);\n  }\n\n  return displayHumanDate(datetime, relativeTo);\n};\n\nexport function displayInterval(interval, relativeTo) {\n  if (relativeTo === undefined) {\n    relativeTo = DateTime.local().setLocale(\"fr\");\n  }\n\n  const fromNowInterval =\n    relativeTo < interval.start\n      ? Interval.fromDateTimes(relativeTo, interval.start)\n      : Interval.fromDateTimes(interval.start, relativeTo);\n\n  const showYear = fromNowInterval.count(\"months\") > 4;\n  const scheduleCalendarDays = interval.count(\"days\");\n\n  const dayPartFormat = {\n    year: showYear ? \"numeric\" : undefined,\n    month: \"long\",\n    day: \"numeric\",\n    weekday: \"long\",\n  };\n\n  if (scheduleCalendarDays === 1) {\n    const dayPart = interval.start.toLocaleString(dayPartFormat);\n    const hourPart = `de ${interval.start.toLocaleString(\n      HOUR_ONLY_FORMAT,\n    )} à ${interval.end.toLocaleString(HOUR_ONLY_FORMAT)}`;\n    return `le ${dayPart}, ${hourPart}`;\n  }\n\n  const startDate = interval.start.toLocaleString(dayPartFormat);\n  const startTime = interval.start.toLocaleString(HOUR_ONLY_FORMAT);\n  const endDate = interval.end.toLocaleString({\n    ...dayPartFormat,\n    year: undefined,\n  });\n  const endTime = interval.end.toLocaleString(HOUR_ONLY_FORMAT);\n  return `du ${startDate} à ${startTime} au ${endDate} à ${endTime}`;\n}\n\nexport function displayIntervalStart(interval, relativeTo) {\n  if (relativeTo === undefined) {\n    relativeTo = DateTime.local().setLocale(\"fr\");\n  }\n  const startDate = interval.start.setLocale(\"fr-FR\");\n  const endDate = interval.end.setLocale(\"fr-FR\");\n  const scheduleCalendarDays = interval.count(\"days\");\n\n  const dayPartFormat = {\n    year: endDate < relativeTo ? \"numeric\" : undefined,\n    month: \"long\",\n    day: \"numeric\",\n  };\n\n  if (scheduleCalendarDays === 1) {\n    const dayPart = startDate.toLocaleString(dayPartFormat);\n    const hourPart = `${startDate.toLocaleString(HOUR_ONLY_FORMAT)}`;\n\n    return `${dayPart}, ${hourPart}`;\n  }\n\n  const start = startDate.toLocaleString({\n    ...dayPartFormat,\n    ...HOUR_ONLY_FORMAT,\n  });\n\n  return `${start}`;\n}\n\nexport function displayIntervalEnd(interval, relativeTo) {\n  if (relativeTo === undefined) {\n    relativeTo = DateTime.local().setLocale(\"fr\");\n  }\n\n  const startDate = DateTime.now();\n  const endDate = interval.end.setLocale(\"fr-FR\");\n  const beforeEnd = Interval.fromISO(`${startDate}/${endDate}`);\n  const diffBetween = beforeEnd.count(\"days\");\n\n  let title = \"En cours, \";\n\n  const dayPartFormat = {\n    year: endDate < relativeTo ? \"numeric\" : undefined,\n    month: \"long\",\n    day: \"numeric\",\n  };\n\n  if (diffBetween === 1) {\n    title += \"jusqu'à \";\n    const hourPart = `${endDate.toLocaleString(HOUR_ONLY_FORMAT)}`;\n    return `${title} ${hourPart}`;\n  }\n\n  if (diffBetween < 7) {\n    title += \"jusqu'à \";\n    return `${title}` + displayHumanDate(endDate);\n  }\n\n  title += \"jusqu'au \";\n\n  const end = endDate.toLocaleString({\n    ...dayPartFormat,\n    ...HOUR_ONLY_FORMAT,\n  });\n\n  return `${title} ${end}`;\n}\n\nconst units = [\"year\", \"month\", \"week\", \"day\", \"hour\", \"minute\", \"second\"];\n\nexport const simpleDate = (datetimeString, hideCurrentYear = true) => {\n  let dateTime = new Date(datetimeString);\n  dateTime = DateTime.fromJSDate(dateTime).setLocale(\"fr\");\n  return dateTime.toLocaleString({\n    year:\n      hideCurrentYear && new Date().getFullYear() === dateTime.get(\"year\")\n        ? undefined\n        : \"numeric\",\n    month: \"long\",\n    day: \"numeric\",\n  });\n};\n\nexport const simpleDateTime = (datetimeString, hideCurrentYear = true) => {\n  let dateTime = new Date(datetimeString);\n  dateTime = DateTime.fromJSDate(dateTime).setLocale(\"fr\");\n  return dateTime.toLocaleString({\n    year:\n      hideCurrentYear && new Date().getFullYear() === dateTime.get(\"year\")\n        ? undefined\n        : \"numeric\",\n    month: \"long\",\n    day: \"numeric\",\n    weekday: \"long\",\n    ...HOUR_ONLY_FORMAT,\n  });\n};\n\nexport const simpleInterval = (start, end) => {\n  const interval = Interval.fromISO(start + \"/\" + end);\n\n  if (interval.start.date === interval.end.date) {\n    return interval.toLocaleString(DateTime.TIME_24_SIMPLE, {\n      locale: \"fr-FR\",\n    });\n  }\n\n  return interval.toLocaleString(DateTime.DATETIME_SHORT, {\n    locale: \"fr-FR\",\n  });\n};\n\nexport const timeAgo = (date, maxUnit = units[0]) => {\n  try {\n    let dateTime = new Date(date);\n    dateTime = DateTime.fromJSDate(dateTime).setLocale(\"fr\");\n    const diff = dateTime.diffNow().shiftTo(...units);\n    const unit = units.find((unit) => diff.get(unit) !== 0) || \"second\";\n    if (maxUnit && units.indexOf(maxUnit) > units.indexOf(unit)) {\n      return \"le \" + simpleDate(date);\n    }\n    const relativeFormatter = new Intl.RelativeTimeFormat(\"fr\", {\n      numeric: \"auto\",\n    });\n    return relativeFormatter.format(Math.trunc(diff.as(unit)), unit);\n  } catch (e) {\n    return date;\n  }\n};\n\nexport const displayShortDate = (datetime) => {\n  try {\n    let date = new Date(datetime);\n    date = DateTime.fromJSDate(date).setLocale(\"fr\");\n    return date.toFormat(\"dd/LL\");\n  } catch (e) {\n    return datetime;\n  }\n};\n\nexport const computeDateToLuxon = (date) => {\n  return typeof date === \"string\"\n    ? DateTime.fromISO(date.replace(/([+-]\\d{2}:\\d{2}):\\d{2}$/, \"$1\"))\n    : typeof date === \"number\"\n      ? DateTime.fromMillis(date.replace(/([+-]\\d{2}:\\d{2}):\\d{2}$/, \"$1\"))\n      : null;\n}\n\nexport const computeScheduleTime = (startTime, endTime) => {\n  const start = computeDateToLuxon(startTime)\n  const end = computeDateToLuxon(endTime)\n\n  if (!start?.isValid || !end?.isValid) {\n    console.warn(\"Start or end time not valid\", start, end);\n    return null;\n  }\n\n  return Interval.fromDateTimes(start, end);\n}\n"],"names":["API_GROUP_PREFIX","ENDPOINT","createRemoveMembershipRequest","groupId","memberId","details","reason","axios","appendQueryParams","endpoint","opt","Object","key","value","querystring","getGroupEndpoint","params","querystringParams","formatMessage","message","data","undefined","objectToFormData","createMessage","groupPk","result","url","body","response","e","createPrivateMessage","updateMessage","updateMessageNotification","messagePk","isMuted","updateMessageLock","isLocked","deleteMessage","reportMessage","createComment","deleteComment","comment","reportComment","joinGroup","followGroup","quitGroup","updateGroup","FormData","headers","setAllMessagesRead","updateMember","memberPk","createGroupLink","updateGroupLink","linkPk","deleteGroupLink","searchGroups","searchTerms","updateOwnMembership","link","encodeURI","useSWR","requestId","obj","rootName","ignoreList","formData","appendFormData","rootProp","Array","File","i","HOUR_ONLY_FORMAT","SAME_YEAR_FORMAT","OTHER_YEAR_FORMAT","dateFromISOString","isostring","zone","DateTime","displayHumanDay","datetime","relativeTo","interval","instanceOf","Interval","calendarDays","calendarWeeks","qualifier","format","displayHumanDate","time","date","displayInterval","showYear","fromNowInterval","scheduleCalendarDays","dayPartFormat","dayPart","hourPart","startDate","startTime","endDate","endTime","displayIntervalStart","start","displayIntervalEnd","diffBetween","beforeEnd","title","end","units","simpleDate","datetimeString","hideCurrentYear","dateTime","Date","computeDateToLuxon","console","maxUnit","diff","unit","relativeFormatter","Intl","Math"],"mappings":"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"}