{"version":3,"file":"static/components/front/app-ca28af71038c5e5a77a5.js?cv=7","mappings":"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","sources":["webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/BottomSheet.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/genericComponents/ModalConfirmation.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/lib/components/utils/time.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/globalContext/hooks.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/msgs/components/common/hooks.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/App.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/front/components/app/index.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/groups/components/utils/api.js","webpack:///home/runner/work/actionpopulaire.fr/actionpopulaire.fr/agir/groups/components/groupPage/GroupSettings/routes.config.js"],"sourcesContent":["import PropTypes from \"prop-types\";\nimport React, {\n  useCallback,\n  useEffect,\n  useRef,\n  useState,\n  Suspense,\n} from \"react\";\nimport styled from \"styled-components\";\n\nimport { lazy } from \"@agir/front/app/utils\";\n\nconst RSBS = lazy(() => import(\"./ReactSpringBottomSheet\"));\n\nconst StyledBottomSheetFooter = styled.footer`\n  &::before {\n    content: \"\";\n    display: block;\n    width: calc(100% - 3rem);\n    height: 1px;\n    margin: 0 auto;\n    background-color: ${(props) => props.theme.text200};\n  }\n\n  button {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    color: ${(props) => props.theme.text1000};\n    background-color: ${(props) => props.theme.background0};\n    box-shadow: none;\n    border: none;\n    height: 54px;\n    font-size: 0.875rem;\n    width: 100%;\n    cursor: pointer;\n  }\n`;\nconst StyledBottomSheet = styled(RSBS)`\n  [data-rsbs-overlay] {\n    background-color: ${(props) => props.theme.background0};\n    z-index: ${(props) => props.theme.zindexPanel};\n  }\n  [data-rsbs-backdrop] {\n    z-index: ${(props) => props.theme.zindexPanel};\n    background-color: rgba(0, 10, 44, 0.6);\n  }\n  [data-rsbs-footer] {\n    padding: 0;\n    box-shadow: none;\n  }\n`;\n\nexport const BottomSheet = (props) => {\n  const { isOpen, onDismiss, shouldDismissOnClick, children } = props;\n  const [isReady, setIsReady] = useState(false);\n  const contentRef = useRef();\n\n  const handleSpringStart = useCallback(\n    (e) => {\n      let content = contentRef.current;\n      if (!content || !shouldDismissOnClick) {\n        return;\n      }\n      const targets = content.querySelectorAll(\"a, button\");\n      if (e.type === \"OPEN\") {\n        targets.forEach((element) => {\n          element.addEventListener(\"click\", onDismiss);\n        });\n      }\n      if (e.type === \"CLOSE\") {\n        targets.forEach((element) => {\n          element.removeEventListener(\"click\", onDismiss);\n        });\n      }\n    },\n    [onDismiss, shouldDismissOnClick],\n  );\n\n  useEffect(() => {\n    isOpen && !isReady && setIsReady(true);\n  }, [isOpen, isReady]);\n\n  return (\n    <Suspense fallback={null}>\n      {isReady && (\n        <StyledBottomSheet\n          open={isOpen}\n          onDismiss={onDismiss}\n          onSpringStart={handleSpringStart}\n          defaultSnap={({ minHeight }) => minHeight}\n          snapPoints={({ maxHeight }) => [\n            2 * (maxHeight / 3),\n            maxHeight - maxHeight / 10,\n            maxHeight / 3,\n          ]}\n          footer={\n            <StyledBottomSheetFooter>\n              <button onClick={onDismiss}>Fermer</button>\n            </StyledBottomSheetFooter>\n          }\n        >\n          <div ref={contentRef}>{children}</div>\n        </StyledBottomSheet>\n      )}\n    </Suspense>\n  );\n};\n\nBottomSheet.propTypes = {\n  isOpen: PropTypes.bool,\n  onDismiss: PropTypes.func,\n  shouldDismissOnClick: PropTypes.bool,\n  children: PropTypes.node,\n};\nexport default BottomSheet;\n","import PropTypes from \"prop-types\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nimport BottomSheet from \"@agir/front/genericComponents/BottomSheet\";\nimport Button from \"@agir/front/genericComponents/Button\";\nimport Modal from \"@agir/front/genericComponents/Modal\";\nimport Spacer from \"@agir/front/genericComponents/Spacer\";\nimport { ResponsiveLayout } from \"@agir/front/genericComponents/grid\";\n\nconst ModalContainer = styled.div`\n  background: ${(props) => props.theme.background0};\n  width: 40%;\n  max-width: 650px;\n  margin: 5% auto;\n  border-radius: ${(props) => props.theme.borderRadius};\n  display: flex;\n  justify-content: center;\n\n  @media (max-width: ${(props) => props.theme.collapse}px) {\n    width: 100%;\n    max-width: unset;\n    margin: 0;\n  }\n`;\n\nconst ModalContent = styled.div`\n  display: inline-flex;\n  flex-direction: column;\n  padding: 1rem 1.5rem;\n\n  h3 {\n    font-size: 1rem;\n  }\n\n  & > ${Button} {\n    margin-bottom: 1rem;\n  }\n`;\n\nconst ModalConfirmation = (props) => {\n  const {\n    shouldShow = false,\n    onClose,\n    title,\n    children,\n    dismissLabel,\n    confirmationLabel = \"\",\n    confirmationUrl = \"\",\n    onConfirm = null,\n    shouldDismissOnClick = true,\n    isConfirming = false,\n    disabled = false,\n    onDismiss\n  } = props;\n\n  return (\n    <ResponsiveLayout\n      DesktopLayout={Modal}\n      MobileLayout={BottomSheet}\n      shouldShow={shouldShow}\n      isOpen={shouldShow}\n      onClose={onClose}\n      onDismiss={onClose}\n      shouldDismissOnClick={shouldDismissOnClick}\n      noScroll\n    >\n      <ModalContainer>\n        <ModalContent>\n          <h3>{title}</h3>\n          {children}\n          <Spacer size=\"1rem\" />\n          {!!confirmationUrl && (\n            <Button\n              wrap\n              color=\"primary\"\n              type=\"button\"\n              link\n              route={confirmationUrl}\n              disabled={disabled || isConfirming}\n              loading={isConfirming}\n            >\n              {confirmationLabel}\n            </Button>\n          )}\n          {!!onConfirm && (\n            <Button\n              wrap\n              color=\"primary\"\n              type=\"button\"\n              onClick={onConfirm}\n              disabled={disabled || isConfirming}\n              loading={isConfirming}\n            >\n              {confirmationLabel}\n            </Button>\n          )}\n          {dismissLabel && (\n            <Button\n              wrap\n              type=\"button\"\n              onClick={(e) => { onClose?.(e); onDismiss?.(e)}}\n              css={`\n                color: ${(props) => props.theme.text1000};\n              `}\n              disabled={isConfirming}\n            >\n              {dismissLabel}\n            </Button>\n          )}\n        </ModalContent>\n      </ModalContainer>\n    </ResponsiveLayout>\n  );\n};\n\nModalConfirmation.propTypes = {\n  shouldShow: PropTypes.bool,\n  onClose: PropTypes.func,\n  title: PropTypes.node,\n  children: PropTypes.node,\n  onDismiss: PropTypes.func,\n  dismissLabel: PropTypes.node,\n  confirmationLabel: PropTypes.node,\n  confirmationUrl: PropTypes.string,\n  onConfirm: PropTypes.func,\n  shouldDismissOnClick: PropTypes.bool,\n  isConfirming: PropTypes.bool,\n  disabled: PropTypes.bool,\n};\n\nexport default ModalConfirmation;\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 = new Date(datetime);\n  datetime = DateTime.fromJSDate(datetime).setLocale(\"fr\");\n\n  if (relativeTo) {\n    relativeTo = new Date(relativeTo);\n    relativeTo = DateTime.fromJSDate(relativeTo).setLocale(\"fr\");\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","import { useCallback } from \"react\";\nimport { useDispatch } from \"@agir/front/globalContext/GlobalContext\";\nimport { addToasts } from \"@agir/front/globalContext/actions\";\n\nexport const useToast = () => {\n  const dispatch = useDispatch();\n\n  const sendToast = useCallback(\n    (message, type, config) => {\n      const toast = {\n        message: message,\n        type: type || \"DEFAULT\",\n        ...config,\n      };\n      dispatch(addToasts(toast));\n    },\n    [dispatch],\n  );\n\n  return sendToast;\n};\n","import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useTimeout } from \"react-use\";\nimport useSWR, { mutate } from \"swr\";\nimport useSWRImmutable from \"swr/immutable\";\nimport useSWRInfinite from \"swr/infinite\";\nimport { validate as uuidValidate } from \"uuid\";\n\nimport axios from \"@agir/lib/utils/axios\";\nimport * as groupAPI from \"@agir/groups/utils/api\";\nimport { routeConfig } from \"@agir/front/app/routes.config\";\nimport { setBackLink } from \"@agir/front/globalContext/actions\";\nimport { useDispatch } from \"@agir/front/globalContext/GlobalContext\";\nimport { useCurrentLocation } from \"@agir/front/app/utils\";\n\nconst MESSAGES_PAGE_SIZE = 10;\nconst COMMENTS_PAGE_SIZE = 15;\nconst REFRESH_INTERVAL = 10 * 60 * 1000;\n\nexport const useUnreadMessageCount = () => {\n  const [isReady, setIsReady] = useState(false)\n  const { data: session } = useSWRImmutable(\"/api/session/\");\n  const { data } = useSWR(\n    isReady && \"/api/user/messages/unread_count/\",\n    {\n      refreshInterval: REFRESH_INTERVAL,\n      dedupingInterval: REFRESH_INTERVAL,\n      focusThrottleInterval: REFRESH_INTERVAL,\n      shouldRetryOnError: false,\n      revalidateIfStale: false,\n    },\n  );\n\n  useEffect(() => {\n    if (session?.user) {\n      setIsReady(true)\n    }\n  }, [session]);\n\n  return data?.unreadMessageCount && !isNaN(parseInt(data.unreadMessageCount))\n    ? parseInt(data.unreadMessageCount)\n    : 0;\n};\n\nexport const useCommentsSWR = (messagePk, autorefresh = false) => {\n  const { data, error, isValidating, mutate, size, setSize } = useSWRInfinite(\n    (index) =>\n      messagePk &&\n      `/api/groupes/messages/${messagePk}/comments/?page=${\n        index + 1\n      }&page_size=${COMMENTS_PAGE_SIZE}`,\n    autorefresh\n      ? {\n          refreshInterval: REFRESH_INTERVAL,\n          dedupingInterval: REFRESH_INTERVAL,\n          focusThrottleInterval: REFRESH_INTERVAL,\n          shouldRetryOnError: false,\n          revalidateIfStale: false,\n          revalidateAll: true,\n        }\n      : undefined,\n  );\n\n  const comments = useMemo(() => {\n    const comments = {};\n    const commentsIds = [];\n    if (Array.isArray(data)) {\n      data.forEach(({ results }) => {\n        if (Array.isArray(results)) {\n          results.forEach((comment) => {\n            if (!comments[comment.id]) {\n              comments[comment.id] = comment;\n              commentsIds.push(comment.id);\n            }\n          });\n        }\n      });\n    }\n    return commentsIds.reverse().map((id) => comments[id]);\n  }, [data]);\n\n  const isLoadingInitialData = !data && !error;\n  const isLoadingMore =\n    isLoadingInitialData ||\n    (size > 0 && data && typeof data[size - 1] === \"undefined\");\n\n  const commentsCount = (data && data[data.length - 1]?.count) || 0;\n  const isEmpty = commentsCount === 0;\n  const isReachingEnd =\n    isEmpty ||\n    comments.length === commentsCount ||\n    (data && data[data.length - 1]?.results?.length < COMMENTS_PAGE_SIZE);\n  const isRefreshing = isValidating && data && data.length === size;\n\n  const loadMore = useCallback(() => setSize(size + 1), [setSize, size]);\n  const isAutoRefreshPausedRef = useRef(false);\n\n  return {\n    comments,\n    commentsCount,\n    error,\n    isLoadingInitialData,\n    isLoadingMore,\n    isRefreshing,\n    loadMore: isEmpty || isReachingEnd ? undefined : loadMore,\n    mutate,\n    isAutoRefreshPausedRef,\n  };\n};\n\nexport const useMessageSWR = (messagePk) => {\n  const dispatch = useDispatch();\n  const pathname = useCurrentLocation();\n\n  const isAutoRefreshPausedRef = useRef(false);\n\n  const { data: session } = useSWRImmutable(\"/api/session/\");\n  const user = session?.user;\n\n  const {\n    data,\n    error: errorMessages,\n    isValidating: isValidatingMessages,\n    mutate: mutateMessages,\n    size,\n    setSize,\n  } = useSWRInfinite(\n    (index) =>\n      user &&\n      `/api/user/messages/?page=${index + 1}&page_size=${MESSAGES_PAGE_SIZE}`,\n    {\n      revalidateIfStale: false,\n      revalidateOnFocus: false,\n      revalidateOnReconnect: false,\n    },\n  );\n  const { data: messageRecipients } = useSWRImmutable(\n    data && \"/api/user/messages/recipients/\",\n  );\n  const {\n    data: currentMessage,\n    error,\n    isValidating,\n    mutate: mutateMessage,\n  } = useSWRImmutable(\n    data && messagePk && uuidValidate(messagePk)\n      ? `/api/groupes/messages/${messagePk}/`\n      : null,\n  );\n\n  const messages = useMemo(() => {\n    const messages = {};\n    const messageIds = [];\n    if (Array.isArray(data)) {\n      data.forEach(({ results }) => {\n        if (Array.isArray(results)) {\n          results.forEach((message) => {\n            if (!messages[message.id]) {\n              messages[message.id] = message;\n              messageIds.push(message.id);\n            }\n          });\n        }\n      });\n    }\n    return messageIds.map((id) => messages[id]);\n  }, [data]);\n\n  const isLoadingInitialData = !data && !errorMessages;\n  const isLoadingMore =\n    isLoadingInitialData ||\n    (size > 0 && data && typeof data[size - 1] === \"undefined\");\n\n  const messageCount = (data && data[data.length - 1]?.count) || 0;\n  const isEmpty = messageCount === 0;\n  const isReachingEnd =\n    isEmpty ||\n    messages.length === messageCount ||\n    (data && data[data.length - 1]?.results?.length < MESSAGES_PAGE_SIZE);\n  const isRefreshing = isValidatingMessages && data && data.length === size;\n\n  const loadMore = useCallback(() => setSize(size + 1), [setSize, size]);\n\n  const currentMessageId = currentMessage?.id;\n\n  const onSelectMessage = useSelectMessage();\n\n  useEffect(() => {\n    dispatch(\n      setBackLink(\n        currentMessageId\n          ? {\n              route: \"messages\",\n              label: \"Retour aux messages\",\n            }\n          : {\n              route: \"events\",\n              label: \"Retour à l'accueil\",\n            },\n      ),\n    );\n  }, [dispatch, currentMessageId, pathname]);\n\n  useEffect(() => {\n    !isValidating &&\n      error?.response?.status === 404 &&\n      onSelectMessage(null, true);\n  }, [error, isValidating, onSelectMessage]);\n\n  useEffect(() => {\n    if (isValidating || !Array.isArray(messages) || !currentMessage) {\n      return;\n    }\n    const updatedMessage = messages.find((m) => m.id === currentMessage.id);\n    if (\n      !updatedMessage ||\n      updatedMessage.lastUpdate === currentMessage.lastUpdate\n    ) {\n      return;\n    }\n    mutateMessage();\n  }, [isValidating, messages, currentMessage, mutateMessage]);\n\n  return {\n    user,\n    messages,\n    messageCount,\n    errorMessages,\n    isLoadingInitialData,\n    isLoadingMore,\n    isRefreshing,\n    loadMore: isEmpty || isReachingEnd ? undefined : loadMore,\n    mutateMessages,\n    messageRecipients,\n    currentMessage,\n    isAutoRefreshPausedRef,\n    onSelectMessage,\n  };\n};\n\nexport const useSelectMessage = () => {\n  const history = useHistory();\n  const handleSelect = useCallback(\n    (messagePk, doNotPush = false) => {\n      const fn = doNotPush ? history.replace : history.push;\n      fn(routeConfig.messages.getLink({ messagePk }), {\n        backLink: { route: \"messages\" },\n      });\n    },\n    [history],\n  );\n\n  return handleSelect;\n};\n\nexport const useMessageActions = (\n  user,\n  messageRecipients,\n  selectedMessage,\n  onSelectMessage,\n  mutateMessages,\n  mutateComments,\n) => {\n  const shouldDismissAction = useRef(false);\n\n  const [isLoading, setIsLoading] = useState(false);\n  const [selectedGroupEvents, setSelectedGroupEvents] = useState([]);\n  const [selectedComment, setSelectedComment] = useState(null);\n  const [messageAction, setMessageAction] = useState(\"\");\n  const [messageErrors, setMessageErrors] = useState(null);\n  const [commentErrors, setCommentErrors] = useState(null);\n\n  const canWriteNewMessage =\n    !!user && Array.isArray(messageRecipients) && messageRecipients.length > 0;\n\n  const canEditSelectedMessage = useMemo(\n    () =>\n      canWriteNewMessage &&\n      selectedMessage?.group &&\n      messageRecipients.some((r) => r.id === selectedMessage.group.id),\n    [canWriteNewMessage, messageRecipients, selectedMessage],\n  );\n\n  const isAuthor = useMemo(() => {\n    if (!user) {\n      return false;\n    }\n    if (!selectedMessage && !selectedComment) {\n      return false;\n    }\n    if (selectedComment) {\n      return selectedComment && selectedComment.author?.id === user.id;\n    }\n    return selectedMessage && selectedMessage.author?.id === user.id;\n  }, [user, selectedMessage, selectedComment]);\n\n  const getSelectedGroupEvents = useCallback(async (group) => {\n    shouldDismissAction.current = false;\n    setIsLoading(true);\n    setSelectedGroupEvents([]);\n    try {\n      const { data: events } = await axios.get(\n        `/api/groupes/${group.id}/evenements/`,\n      );\n      setIsLoading(false);\n      setSelectedGroupEvents(events);\n    } catch (e) {\n      setIsLoading(false);\n    }\n  }, []);\n\n  const saveMessage = useCallback(\n    async (message) => {\n      setIsLoading(true);\n      setMessageErrors(null);\n      shouldDismissAction.current = false;\n      try {\n        const { data, error } = message.id\n          ? await groupAPI.updateMessage(message)\n          : await groupAPI.createMessage(message.group.id, message);\n\n        if (error) {\n          typeof error === \"string\"\n            ? setMessageErrors({ details: \"Une erreur est survenue\" })\n            : setMessageErrors(error);\n          setIsLoading(false);\n          return;\n        }\n        shouldDismissAction.current = true;\n        setIsLoading(false);\n        mutateMessages();\n        if (message.id) {\n          mutate(`/api/groupes/messages/${message.id}/`, () => data, false);\n        } else {\n          onSelectMessage(data.id);\n        }\n      } catch (e) {\n        setIsLoading(false);\n        setMessageErrors({ details: e.message });\n      }\n    },\n    [onSelectMessage, mutateMessages],\n  );\n\n  const writeNewComment = useCallback(\n    async (comment) => {\n      setIsLoading(true);\n      setCommentErrors(null);\n      try {\n        const { error } = await groupAPI.createComment(\n          selectedMessage.id,\n          comment,\n        );\n        if (error) {\n          typeof error === \"string\"\n            ? setCommentErrors({ details: \"Une erreur est survenue\" })\n            : setCommentErrors(error);\n          setIsLoading(false);\n          return;\n        }\n        setIsLoading(false);\n        mutateComments();\n        onSelectMessage(selectedMessage.id);\n      } catch (e) {\n        setIsLoading(false);\n        setCommentErrors({ details: e.message });\n      }\n    },\n    [selectedMessage, onSelectMessage, mutateComments],\n  );\n\n  const onDelete = useCallback(async () => {\n    if (!selectedMessage && !selectedComment) {\n      return;\n    }\n    setIsLoading(true);\n    try {\n      selectedComment\n        ? await groupAPI.deleteComment(selectedComment, selectedMessage)\n        : await groupAPI.deleteMessage(selectedMessage);\n      setIsLoading(false);\n    } catch (e) {\n      setIsLoading(false);\n    }\n  }, [selectedMessage, selectedComment]);\n\n  const onReport = useCallback(async () => {\n    if (!selectedMessage && !selectedComment) {\n      return;\n    }\n    setIsLoading(true);\n    try {\n      selectedComment\n        ? await groupAPI.reportComment(selectedComment)\n        : await groupAPI.reportMessage(selectedMessage);\n      setIsLoading(false);\n    } catch (e) {\n      setIsLoading(false);\n    }\n  }, [selectedMessage, selectedComment]);\n\n  const writeNewMessage = useCallback(() => {\n    setMessageAction(\"create\");\n  }, []);\n\n  const editMessage = useCallback(() => {\n    getSelectedGroupEvents(selectedMessage.group);\n    setMessageAction(\"edit\");\n  }, [getSelectedGroupEvents, selectedMessage]);\n\n  const confirmDelete = useCallback(() => {\n    setMessageAction(\"delete\");\n  }, []);\n\n  const confirmReport = useCallback(() => {\n    setMessageAction(\"report\");\n  }, []);\n\n  const confirmReportComment = useCallback((comment) => {\n    setSelectedComment(comment);\n    setMessageAction(\"report\");\n  }, []);\n\n  const confirmDeleteComment = useCallback((comment) => {\n    setSelectedComment(comment);\n    setMessageAction(\"delete\");\n  }, []);\n\n  const dismissMessageAction = useCallback(() => {\n    if (messageAction === \"delete\" && selectedMessage && selectedComment) {\n      mutateComments();\n    } else if (messageAction === \"delete\") {\n      onSelectMessage(null);\n      mutateMessages();\n    }\n    setMessageAction(\"\");\n    setSelectedComment(null);\n    shouldDismissAction.current = false;\n  }, [\n    messageAction,\n    selectedComment,\n    selectedMessage,\n    onSelectMessage,\n    mutateMessages,\n    mutateComments,\n  ]);\n\n  useEffect(() => {\n    !isLoading && shouldDismissAction.current && dismissMessageAction();\n  }, [isLoading, dismissMessageAction]);\n\n  return {\n    isLoading,\n\n    messageAction,\n    selectedGroupEvents,\n    selectedComment,\n\n    messageErrors,\n    commentErrors,\n\n    writeNewMessage: canWriteNewMessage ? writeNewMessage : undefined,\n    writeNewComment,\n    editMessage: canEditSelectedMessage ? editMessage : undefined,\n    confirmDelete: canEditSelectedMessage ? confirmDelete : undefined,\n    confirmReport,\n    confirmDeleteComment,\n    confirmReportComment,\n\n    getSelectedGroupEvents,\n    saveMessage,\n    onDelete:\n      messageAction === \"delete\" || canEditSelectedMessage\n        ? onDelete\n        : undefined,\n    onReport:\n      messageAction === \"report\" || (canEditSelectedMessage && !isAuthor)\n        ? onReport\n        : undefined,\n    dismissMessageAction,\n  };\n};\n","import React from \"react\";\nimport { GlobalContextProvider } from \"@agir/front/globalContext/GlobalContext\";\nimport SWRContext from \"@agir/front/allPages/SWRContext\";\n\nimport PushModal from \"@agir/front/allPages/PushModal/PushModal\";\n\nimport Router from \"./Router\";\n\nexport default function App() {\n  return (\n    <SWRContext>\n      <GlobalContextProvider hasRouter hasToasts>\n        <Router>\n          <PushModal isActive />\n        </Router>\n      </GlobalContextProvider>\n    </SWRContext>\n  );\n}\n","import \"core-js/es/string/replace-all\";\n\nimport React from \"react\";\nimport onDOMReady from \"@agir/lib/utils/onDOMReady\";\nimport logger from \"@agir/lib/utils/logger\";\n\nimport \"@agir/front/allPages/sentry\";\nimport \"@agir/front/allPages/ios\";\nimport \"@agir/front/allPages/fonts/fonts.css\";\nimport \"@agir/front/genericComponents/style.scss\";\n\nimport { renderReactComponent } from \"@agir/lib/utils/react\";\n\nimport App from \"@agir/front/app/App\";\n\nconst log = logger(__filename);\n\nconst init = () => {\n  const renderElement = document.getElementById(\"mainApp\");\n  if (!renderElement) {\n    return;\n  }\n  renderReactComponent(<App />, renderElement);\n};\nonDOMReady(init);\n\nif (\"serviceWorker\" in navigator) {\n  window.addEventListener(\"load\", async () => {\n    try {\n      window.AgirSW = await navigator.serviceWorker.register(\"/sw.js\");\n      log.debug(\"Registered service worker\");\n    } catch (e) {\n      log.error(\"Failed to register service worker\");\n    }\n  });\n\n  window.addEventListener(\"beforeinstallprompt\", (e) => {\n    // Prevent the mini-infobar from appearing on mobile\n    e.preventDefault();\n  });\n}\n","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  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:\n    `${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) => useSWR(requestId ? `/api/groupes/request-membership-remove/${requestId}` : null)\n\nexport const useRemoveMembershipRequestByGroup = (groupId) => {\n  return useSWR(`/api/groupes/${groupId}/request-membership-remove`)\n}\n\nexport const createRemoveMembershipRequest = async (groupId, memberId, details, reason) => axios.post(`/api/groupes/request-membership-remove/`, {\n  supportgroupId: groupId,\n  personId: memberId,\n  details,\n  reason: reason\n})\n\nexport const useMembershipRemoveRequestRefuse = (requestId) => axios.patch(`/api/groupes/request-membership-remove/${requestId}/refuse`)\n\nexport const useMembershipRemoveRequestValidate = (requestId) => axios.patch(`/api/groupes/request-membership-remove/${requestId}/validate`)\n\nexport const appendQueryParams = (endpoint, params, querystringParams) => {\n  if (params) {\n    Object.entries(params).forEach(([key, value]) => {\n      endpoint = endpoint.replace(`:${key}`, value);\n    });\n  }\n\n  if (querystringParams) {\n    endpoint += `?${querystring.stringify(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 ? objectToFormData({...data, attachmentCreate: data.attachment, attachment: null}) : 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","import { lazy } from \"@agir/front/app/utils\";\nimport {\n  RouteConfig,\n  routeConfig as globalRouteConfig,\n} from \"@agir/front/app/routes.config\";\n\nimport illustrationManage from \"@agir/front/genericComponents/images/group_members.svg\";\nimport illustrationFinance from \"@agir/front/genericComponents/images/group_financement.svg\";\nimport illustrationUpcomingEvents from \"@agir/front/genericComponents/images/group_agenda.svg\";\nimport illustrationGeneral from \"@agir/front/genericComponents/images/group_general.svg\";\nimport illustrationContact from \"@agir/front/genericComponents/images/group_contact.svg\";\nimport illustrationLinks from \"@agir/front/genericComponents/images/group_links.svg\";\nimport illustrationHelp from \"@agir/front/genericComponents/images/group_help.svg\";\nimport illustrationStats from \"@agir/front/genericComponents/images/group_stats.svg\";\nimport { useMemo } from \"react\";\n\nconst GroupSettingsReadOnlyMembers = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsreadonlymembers\" */ \"@agir/groups/groupPage/GroupSettings/GroupReadOnlyMembersPage\"\n    ),\n);\nconst GroupSettingsActiveMembers = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsactivemembers\" */ \"@agir/groups/groupPage/GroupSettings/GroupActiveMembersPage\"\n    ),\n);\nconst GroupSettingsContacts = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingscontacts\" */ \"@agir/groups/groupPage/GroupSettings/GroupContactsPage\"\n    ),\n);\nconst GroupSettingsManage = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsmanage\" */ \"@agir/groups/groupPage/GroupSettings/GroupManagementPage\"\n    ),\n);\nconst GroupSettingsMateriel = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsmateriel\" */ \"@agir/groups/groupPage/GroupSettings/GroupMaterielPage\"\n    ),\n);\nconst GroupSettingsUpcomingEvents = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsupcomingevents\" */ \"@agir/groups/groupPage/GroupSettings/GroupUpcomingEventPage\"\n    ),\n);\nconst GroupSettingsFinance__Group = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsfinancegroup\" */ \"@agir/groups/groupPage/GroupSettings/GroupFinancePage/Group\"\n    ),\n);\nconst GroupSettingsFinance__BouDep = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsfinanceboudep\" */ \"@agir/groups/groupPage/GroupSettings/GroupFinancePage/BouDep\"\n    ),\n);\nconst GroupSettingsGeneral = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsgeneral\" */ \"@agir/groups/groupPage/GroupSettings/GroupGeneralPage\"\n    ),\n);\nconst GroupSettingsLocation = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingslocation\" */ \"@agir/groups/groupPage/GroupSettings/GroupLocalizationPage\"\n    ),\n);\nconst GroupSettingsContact = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingscontact\" */ \"@agir/groups/groupPage/GroupSettings/GroupContactPage\"\n    ),\n);\nconst GroupSettingsLinks = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingslinks\" */ \"@agir/groups/groupPage/GroupSettings/GroupLinksPage\"\n    ),\n);\nconst GroupSettingsCertification = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingscertification\" */ \"@agir/groups/groupPage/GroupSettings/GroupCertificationPage\"\n    ),\n);\nconst GroupSettingsHelp = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingshelp\" */ \"@agir/groups/groupPage/GroupSettings/GroupHelpPage\"\n    ),\n);\nconst GroupSettingsStats = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupsettingsstats\" */ \"@agir/groups/groupPage/GroupSettings/GroupStatisticsPage\"\n    ),\n);\nconst GroupRemoveRequestMembershipPage = lazy(\n  () =>\n    import(\n      /* webpackChunkName: \"r-groupremovemembershiprequest\" */\n      \"@agir/groups/groupPage/GroupSettings/GroupMembershipRemoveRequestPage\"\n    ),\n);\n\nexport const menuRoute = {\n  id: \"menu\",\n  path: \"gestion/\",\n  exact: false,\n  label: \"Paramètres du groupe\",\n};\n\nexport const routeConfig = {\n  members: {\n    id: \"members\",\n    path: \"membres/\",\n    exact: true,\n    label: \"Membres actifs\",\n    icon: \"fa-users\",\n    getComponent: (group) =>\n      group.isEditable\n        ? GroupSettingsActiveMembers\n        : GroupSettingsReadOnlyMembers,\n    isActive: true,\n    menuGroup: 1,\n  },\n  stats: {\n    id: \"stats\",\n    path: \"statistiques/\",\n    exact: true,\n    label: \"Statistiques\",\n    icon: \"fa-chart-line\",\n    Component: GroupSettingsStats,\n    illustration: illustrationStats,\n    isActive: true,\n    menuGroup: 1,\n  },\n  contacts: {\n    id: \"contacts\",\n    path: \"contacts/\",\n    exact: true,\n    label: \"Contacts\",\n    icon: \"fa-address-book\",\n    Component: GroupSettingsContacts,\n    isActive: (group) => group.isEditable,\n    menuGroup: 1,\n  },\n  manage: {\n    id: \"manage\",\n    path: \"animation/\",\n    exact: true,\n    label: \"Gestion et animation\",\n    icon: \"lock\",\n    Component: GroupSettingsManage,\n    illustration: illustrationManage,\n    isActive: (group) => group.isEditable,\n    menuGroup: 1,\n  },\n  certification: {\n    id: \"certification\",\n    path: \"certification/\",\n    exact: true,\n    label: \"Certification\",\n    icon: \"check-circle\",\n    Component: GroupSettingsCertification,\n    isActive: (group) => group.isCertifiable || group.isCertified,\n    menuGroup: 1,\n  },\n  materiel: {\n    id: \"materiel\",\n    path: \"materiel/\",\n    exact: true,\n    label: \"Matériel\",\n    icon: \"fa-box-taped\",\n    Component: GroupSettingsMateriel,\n    isActive: (group) =>\n      Array.isArray(group.discountCodes) && group.discountCodes.length > 0,\n    menuGroup: 1,\n  },\n  finance: {\n    id: \"finance\",\n    path: \"finance/\",\n    exact: true,\n    label: (group) =>\n      group.isBoucleDepartementale ? \"Caisse de la boucle\" : \"Caisse du groupe\",\n    icon: \"fa-pig\",\n    getComponent: (group) =>\n      group.isBoucleDepartementale\n        ? GroupSettingsFinance__BouDep\n        : GroupSettingsFinance__Group,\n    illustration: illustrationFinance,\n    isActive: (group) => group.isFinanceable && group.isFinanceManager,\n    menuGroup: 1,\n  },\n  upcomingEvents: {\n    id: \"upcomingEvents\",\n    path: \"agenda/\",\n    exact: true,\n    label: \"Agenda\",\n    icon: \"calendar\",\n    Component: GroupSettingsUpcomingEvents,\n    illustration: illustrationUpcomingEvents,\n    isActive: true,\n    menuGroup: 1,\n  },\n  general: {\n    id: \"general\",\n    path: \"general/\",\n    exact: true,\n    label: \"Général\",\n    icon: \"file-text\",\n    Component: GroupSettingsGeneral,\n    illustration: illustrationGeneral,\n    isActive: (group) => group.isEditable,\n    menuGroup: 2,\n  },\n  location: {\n    id: \"location\",\n    path: \"localisation/\",\n    exact: true,\n    label: \"Localisation\",\n    icon: \"map-pin\",\n    Component: GroupSettingsLocation,\n    isActive: (group) => group.isEditable,\n    menuGroup: 2,\n  },\n  contact: {\n    id: \"contact\",\n    path: \"contact/\",\n    exact: true,\n    label: \"Moyens de contact\",\n    icon: \"fa-comment-question\",\n    Component: GroupSettingsContact,\n    illustration: illustrationContact,\n    isActive: (group) => group.isEditable,\n    menuGroup: 2,\n  },\n  links: {\n    id: \"links\",\n    path: \"liens/\",\n    exact: true,\n    label: \"Liens et réseaux sociaux\",\n    icon: \"at-sign\",\n    Component: GroupSettingsLinks,\n    illustration: illustrationLinks,\n    isActive: true,\n    menuGroup: 2,\n  },\n  help: {\n    id: \"help\",\n    path: \"ressources/\",\n    exact: true,\n    label: \"Ressources et documents\",\n    icon: \"fa-folder-open\",\n    Component: GroupSettingsHelp,\n    illustration: illustrationHelp,\n    isActive: true,\n    menuGroup: 3,\n  },\n  removeMemberShipRequest: {\n    id: \"removeMembership\",\n    path: \"requete-suppression-membre/:requestId?\",\n    icon: \"more-horizontal\",\n    exact: true,\n    isActive: true,\n    label: \"Requête de suppression de membre\",\n    Component: GroupRemoveRequestMembershipPage,\n    illustration: illustrationHelp,\n  },\n};\n\nexport const getMenuRoute = (basePath) =>\n  new RouteConfig({\n    ...menuRoute,\n    path: basePath + menuRoute.path,\n  });\n\nconst getActiveRoutes = (group) =>\n  Object.values(routeConfig).filter((route) => {\n    if (!group || !group.isManager) {\n      return false;\n    }\n    if (typeof route.isActive === \"function\") {\n      return !!route.isActive(group);\n    }\n    return !!route.isActive;\n  });\n\nexport const groupGroupRoutes = (routes) => {\n  return Object.values(\n    routes.reduce((o, item) => {\n      if (item.menuGroup) {\n        o[item.menuGroup] = o[item.menuGroup] || [];\n        o[item.menuGroup].push(item);\n      }\n      return o;\n    }, {}),\n  );\n};\n\nexport const getRoutes = (basePath, group) =>\n  getActiveRoutes(group).map(\n    (route) =>\n      new RouteConfig({\n        ...route,\n        label:\n          typeof route.label === \"function\" ? route.label(group) : route.label,\n        Component:\n          typeof route.getComponent === \"function\"\n            ? route.getComponent(group)\n            : route.Component,\n        path: basePath + menuRoute.path + route.path,\n      }),\n  );\n\nexport const getGroupSettingLinks = (group, basePath) => {\n  const links = {};\n\n  if (!group?.id || !group.isManager) {\n    return links;\n  }\n\n  if (!basePath) {\n    const activeRoutes = getActiveRoutes(group);\n    links.menu = globalRouteConfig.groupSettings.getLink({\n      groupPk: group.id,\n    });\n    activeRoutes.forEach((route) => {\n      links[route.id] = globalRouteConfig.groupSettings.getLink({\n        activePanel: route.path.replace(\"/\", \"\") || null,\n        groupPk: group.id,\n      });\n    });\n    return links;\n  }\n\n  const activeRoutes = getRoutes(basePath, group);\n  links.menu = getMenuRoute(basePath).getLink();\n  activeRoutes.forEach((route) => {\n    links[route.id] = route.getLink();\n  });\n\n  return links;\n};\n\nexport default getRoutes;\n"],"names":["RSBS","lazy","StyledBottomSheetFooter","styled","footer","props","theme","text200","text1000","background0","StyledBottomSheet","zindexPanel","isOpen","onDismiss","shouldDismissOnClick","children","isReady","setIsReady","useState","contentRef","useRef","handleSpringStart","useCallback","e","content","current","targets","querySelectorAll","type","forEach","element","addEventListener","removeEventListener","useEffect","React","Suspense","fallback","open","onSpringStart","defaultSnap","minHeight","snapPoints","maxHeight","onClick","ref","ModalContainer","div","borderRadius","collapse","ModalContent","Button","shouldShow","onClose","title","dismissLabel","confirmationLabel","confirmationUrl","onConfirm","isConfirming","disabled","ResponsiveLayout","DesktopLayout","Modal","MobileLayout","BottomSheet","noScroll","Spacer","size","wrap","color","link","route","loading","_StyledButton","HOUR_ONLY_FORMAT","hour","minute","SAME_YEAR_FORMAT","weekday","month","day","OTHER_YEAR_FORMAT","year","dateFromISOString","isostring","zone","DateTime","fromISO","setLocale","displayHumanDay","datetime","relativeTo","interval","instanceOf","undefined","local","Interval","fromDateTimes","calendarDays","count","toRelativeCalendar","base","unit","calendarWeeks","qualifier","weekdayLong","trim","format","toLocaleString","displayHumanDate","time","date","displayHumanDateString","Date","fromJSDate","displayInterval","dayPartFormat","start","end","_objectSpread","displayIntervalStart","startDate","displayIntervalEnd","now","endDate","diffBetween","units","simpleDate","datetimeString","hideCurrentYear","dateTime","getFullYear","get","simpleDateTime","simpleInterval","TIME_24_SIMPLE","locale","DATETIME_SHORT","timeAgo","maxUnit","diff","diffNow","shiftTo","find","indexOf","Intl","RelativeTimeFormat","numeric","Math","trunc","as","displayShortDate","toFormat","useToast","dispatch","useDispatch","message","config","toast","addToasts","REFRESH_INTERVAL","useUnreadMessageCount","data","session","useSWRImmutable","useSWR","refreshInterval","dedupingInterval","focusThrottleInterval","shouldRetryOnError","revalidateIfStale","user","unreadMessageCount","isNaN","parseInt","useCommentsSWR","messagePk","autorefresh","_data","_data2","error","isValidating","mutate","setSize","useSWRInfinite","index","revalidateAll","comments","useMemo","commentsIds","Array","isArray","results","comment","id","push","reverse","map","isLoadingInitialData","isLoadingMore","commentsCount","length","isEmpty","isReachingEnd","isRefreshing","loadMore","isAutoRefreshPausedRef","useMessageSWR","_data3","_data4","pathname","useCurrentLocation","errorMessages","isValidatingMessages","mutateMessages","revalidateOnFocus","revalidateOnReconnect","messageRecipients","currentMessage","mutateMessage","uuidValidate","messages","messageIds","messageCount","currentMessageId","onSelectMessage","useSelectMessage","setBackLink","label","_error$response","response","status","updatedMessage","m","lastUpdate","history","useHistory","doNotPush","replace","routeConfig","getLink","backLink","useMessageActions","selectedMessage","mutateComments","shouldDismissAction","isLoading","setIsLoading","selectedGroupEvents","setSelectedGroupEvents","selectedComment","setSelectedComment","messageAction","setMessageAction","messageErrors","setMessageErrors","commentErrors","setCommentErrors","canWriteNewMessage","canEditSelectedMessage","group","some","r","isAuthor","_selectedMessage$auth","_selectedComment$auth","author","getSelectedGroupEvents","async","events","axios","saveMessage","groupAPI","details","writeNewComment","onDelete","onReport","writeNewMessage","editMessage","confirmDelete","confirmReport","confirmReportComment","confirmDeleteComment","dismissMessageAction","App","SWRContext","GlobalContextProvider","hasRouter","hasToasts","Router","PushModal","isActive","log","logger","onDOMReady","init","renderElement","document","getElementById","renderReactComponent","navigator","window","AgirSW","serviceWorker","register","debug","preventDefault","API_GROUP_PREFIX","ENDPOINT","getGroup","getGroupSuggestions","joinGroup","followGroup","updateOwnMembership","quitGroup","getUpcomingEvents","getPastEvents","getPastEventReports","getEventsJoinedByGroup","getMessages","getMessage","createMessage","createPrivateMessage","updateMessage","deleteMessage","messageNotification","messageLocked","messageParticipants","getComments","createComment","deleteComment","setAllMessagesRead","getMembers","updateGroup","inviteToGroup","getMemberPersonalInformation","updateMember","getFinance","report","createGroupExternalLink","groupExternalLink","searchGroups","geoSearchGroups","getStatistics","useMembershipRemoveRequestById","requestId","useRemoveMembershipRequestByGroup","groupId","createRemoveMembershipRequest","memberId","reason","post","supportgroupId","personId","useMembershipRemoveRequestRefuse","patch","useMembershipRemoveRequestValidate","appendQueryParams","endpoint","params","querystringParams","Object","entries","key","value","querystring","stringify","arrayFormat","getGroupEndpoint","formatMessage","linkedEvent","attachment","file","objectToFormData","attachmentCreate","groupPk","result","url","body","updateMessageNotification","isMuted","put","updateMessageLock","isLocked","delete","reportMessage","object_id","content_type","commentPk","reportComment","_e$response","_e$response2","headers","image","FormData","keys","append","memberPk","saveGroupLink","encodeURI","includes","linkPk","updateGroupLink","createGroupLink","deleteGroupLink","success","searchTerms","q","global","GroupSettingsReadOnlyMembers","GroupSettingsActiveMembers","GroupSettingsContacts","GroupSettingsManage","GroupSettingsMateriel","GroupSettingsUpcomingEvents","GroupSettingsFinance__Group","GroupSettingsFinance__BouDep","GroupSettingsGeneral","GroupSettingsLocation","GroupSettingsContact","GroupSettingsLinks","GroupSettingsCertification","GroupSettingsHelp","GroupSettingsStats","GroupRemoveRequestMembershipPage","menuRoute","path","exact","members","icon","getComponent","isEditable","menuGroup","stats","Component","illustration","illustrationStats","contacts","manage","illustrationManage","certification","isCertifiable","isCertified","materiel","discountCodes","finance","isBoucleDepartementale","illustrationFinance","isFinanceable","isFinanceManager","upcomingEvents","illustrationUpcomingEvents","general","illustrationGeneral","location","contact","illustrationContact","links","illustrationLinks","help","illustrationHelp","removeMemberShipRequest","getMenuRoute","basePath","RouteConfig","getActiveRoutes","values","filter","isManager","groupGroupRoutes","routes","reduce","o","item","getRoutes","getGroupSettingLinks","activeRoutes","menu","globalRouteConfig","groupSettings","activePanel"],"sourceRoot":""}