{"version":3,"file":"mb_projects_list.js","mappings":"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","sources":["webpack://a4-meinberlin/./meinberlin/react/projects/ProjectsList.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/Spinner.jsx","webpack://a4-meinberlin/./meinberlin/react/contrib/helpers.js","webpack://a4-meinberlin/./meinberlin/react/contrib/ImageWithPlaceholder.jsx","webpack://a4-meinberlin/./meinberlin/react/plans/react_projects_list.jsx","webpack://a4-meinberlin/./meinberlin/react/projects/ProjectTile.jsx","webpack://a4-meinberlin/./meinberlin/react/projects/ProjectTopics.jsx","webpack://a4-meinberlin/./meinberlin/react/projects/get-timespan.js"],"sourcesContent":["import React from 'react'\nimport django from 'django'\nimport ProjectTile from './ProjectTile'\nimport { classNames } from 'adhocracy4'\nimport Spinner from '../contrib/Spinner'\n\nconst translated = {\n  showCompletedProjectsHeading: django.gettext('Show completed projects too?'),\n  showCompletedProjectsBody: django.gettext('Expand your search to view completed projects and discover more possibilities.'),\n  showCompletedProjectsButton: django.gettext('Show completed'),\n  showingProjects: django.ngettext(\n    'Showing %s project',\n    'Showing %s projects',\n    0\n  ),\n  noProjectsFound: django.gettext('No projects found')\n}\n\nconst ProjectsList = ({\n  projects: initialProjects,\n  projectsUrl,\n  topicChoices,\n  isHorizontal,\n  showMap,\n  searchCompletedProjects,\n  showSearchCompletedProjectsButton,\n  visibleProjects\n}) => {\n  const [projects, setProjects] = React.useState(initialProjects || [])\n  const [loading, setLoading] = React.useState(!initialProjects)\n  const [announcement, setAnnouncement] = React.useState('')\n\n  React.useEffect(() => {\n    setProjects(initialProjects)\n  }, [initialProjects])\n\n  React.useEffect(() => {\n    if (!projectsUrl) return\n\n    const fetchData = async () => {\n      try {\n        setLoading(true)\n        const response = await fetch(projectsUrl)\n        if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`)\n\n        const data = await response.json()\n        setProjects(data)\n      } catch (error) {\n        console.error('Failed to fetch projects:', error)\n        setProjects([])\n      } finally {\n        setLoading(false)\n      }\n    }\n\n    fetchData()\n  }, [projectsUrl])\n\n  React.useEffect(() => {\n    if (!loading) {\n      // When map is shown, use visibleProjects. When map is hidden, use all projects\n      const projectsToShow = showMap ? (visibleProjects || []) : projects\n      if (projectsToShow.length > 0) {\n        setAnnouncement(django.interpolate(translated.showingProjects, [projectsToShow.length]))\n      } else {\n        setAnnouncement(translated.noProjectsFound)\n      }\n    }\n  }, [projects, visibleProjects, loading, showMap])\n\n  React.useEffect(() => {\n    if (initialProjects !== undefined) {\n      const count = initialProjects.length\n      const message = count > 0\n        ? django.interpolate(django.ngettext(\n          'Showing %s project',\n          'Showing %s projects',\n          count\n        ), [count])\n        : django.gettext('No projects found')\n      setAnnouncement(message)\n    }\n  }, [initialProjects])\n\n  if (loading) return <Spinner />\n\n  // When map is shown, show visible projects (could be empty)\n  // When map is hidden, show all projects\n  const displayProjects = showMap ? (visibleProjects || []) : projects\n\n  return (\n    <>\n      <div\n        aria-live=\"polite\"\n        aria-atomic=\"true\"\n        className=\"sr-only\"\n        role=\"status\"\n      >\n        {announcement}\n      </div>\n\n      <ul className={classNames('projects-list', isHorizontal ? 'projects-list--horizontal' : 'projects-list--vertical')}>\n        {\n          displayProjects.length > 0 &&\n          displayProjects.map((project, index) => (\n            <li key={'project-' + project.id + '-' + index}>\n              <ProjectTile\n                project={project}\n                isHorizontal={isHorizontal}\n                topicChoices={topicChoices}\n              />\n            </li>\n          ))\n        }\n        {\n          showSearchCompletedProjectsButton && (\n            <li key=\"show-completed-projects\">\n              <h3 className=\"projects-list__showCompletedHeading\">{translated.showCompletedProjectsHeading}</h3>\n              <p>\n                {translated.showCompletedProjectsBody}\n              </p>\n              <button\n                onClick={searchCompletedProjects}\n                className=\"button button--light\"\n                type=\"button\"\n              >\n                {translated.showCompletedProjectsButton}\n              </button>\n            </li>\n          )\n        }\n      </ul>\n    </>\n  )\n}\n\nexport default ProjectsList\n","import React from 'react'\nimport django from 'django'\n\nconst loading = django.gettext('loading')\n\nexport default function Spinner () {\n  return (\n    <div className=\"align--center\">\n      <svg className=\"spinner-land\" viewBox=\"0 0 50 50\" aria-label={loading}>\n        <circle className=\"stroke\" />\n      </svg>\n    </div>\n  )\n}\n","import cookie from 'js-cookie'\nimport django from 'django'\n\nexport function updateItem (data, url, method) {\n  return fetch(url, {\n    headers: {\n      'Content-Type': 'application/json; charset=utf-8',\n      'X-CSRFToken': cookie.get('csrftoken')\n    },\n    method,\n    body: JSON.stringify(data)\n  }\n  )\n}\n\n// toLocaleDate returns a formatted and internationalized\n// date string. Fallback formatting is the German variant.\n// input: 2021-11-11T15:37:19.490201+01:00\n// output: 11. November 2021 (depending on locale)\nexport const toLocaleDate = (\n  isodate,\n  locale = 'de-DE',\n  formatStyle = { month: 'short', day: 'numeric', year: 'numeric' }\n) => {\n  const date = new Date(isodate)\n  return new Intl.DateTimeFormat(locale, formatStyle).format(date)\n}\n\n/*\n * checks if two arrays are equal\n *\n * @param {array} a\n * @param {array} b\n * @returns {boolean}\n */\nexport const arraysEqual = (a, b) => {\n  if (a === b) return true\n  if (a == null || b == null) return false\n  if (a.length !== b.length) return false\n\n  const aSorted = [...a].sort()\n  const bSorted = [...b].sort()\n\n  for (let i = 0; i < aSorted.length; ++i) {\n    if (aSorted[i] !== bSorted[i]) return false\n  }\n  return true\n}\n\n/*\n * converts an object to URLSearchParams\n *\n * This function takes an object and converts it into a URLSearchParams\n * instance, which can be used for query string formatting in URLs.\n * It handles arrays by appending each value to the parameter, and ignores\n * any null or undefined values.\n *\n * Example:\n * For the input:\n *   { search: 'apple', category: 'fruit', tags: ['red', 'green'], page: null }\n * The output will be:\n *   \"search=apple&category=fruit&tags=red&tags=green\"\n *\n * @param {Object} params - The object to convert into URLSearchParams\n * @returns {URLSearchParams} - The resulting URLSearchParams instance\n */\nexport const toSearchParams = (params) => {\n  return Object.entries(params).reduce((acc, [key, value]) => {\n    if (value == null || value === '') return acc\n\n    if (Array.isArray(value)) {\n      value.forEach(val => (val != null && val !== '') && acc.append(key, val))\n    } else {\n      acc.set(key, value)\n    }\n\n    return acc\n  }, new URLSearchParams())\n}\n\n/*\n * Calculates the geographical distance between two points using the Haversine formula.\n *\n * This function computes the shortest distance between two latitude/longitude coordinates\n * on Earth's surface, returning the result in meters.\n *\n * Example:\n * getDistanceBetweenPoints([13.405, 52.52], [9.9937, 53.5511])\n * returns: ~255600 meters (distance between Berlin and Hamburg)\n *\n * @param {number[]} coords1 - [longitude, latitude] of the first point\n * @param {number[]} coords2 - [longitude, latitude] of the second point\n * @returns {number} - Distance between the two points in meters\n */\nexport const getDistanceBetweenPoints = (coords1, coords2) => {\n  const toRad = (angle) => (angle * Math.PI) / 180\n\n  const [lon1, lat1] = coords1\n  const [lon2, lat2] = coords2\n\n  const earthRadiusInMeters = 6371000\n  const deltaLat = toRad(lat2 - lat1)\n  const deltaLon = toRad(lon2 - lon1)\n\n  const haversineFormula =\n    Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +\n    Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2)\n\n  const centralAngle = 2 * Math.atan2(Math.sqrt(haversineFormula), Math.sqrt(1 - haversineFormula))\n\n  return earthRadiusInMeters * centralAngle\n}\n\nconst statusNames = [django.gettext('ongoing'), django.gettext('upcoming'), django.gettext('done')]\nconst plansText = django.gettext('Plans')\n\n/*\n * Converts a search profile object into a structured list of filters.\n *\n * This function extracts relevant filtering criteria from a given search profile\n * and returns them as an array of arrays, where each sub-array represents a different\n * filter category. Empty filters are removed to ensure a clean output.\n *\n * Example:\n * Given a search profile:\n * {\n *   query_text: \"Lichtenberg\",\n *   districts: [{ name: \"Charlottenburg-Wilmersdorf\" }, { name: \"Friedrichshain-Kreuzberg\" }],\n *   topics: [{ name: \"Work & economy\" }],\n *   project_types: [{ name: \"information (no participation)\" }],\n *   status: [{ name: \"ongoing\" }],\n *   organisations: [{ name: \"liqd\" }],\n *   kiezradars: [{ name: \"Kiezradar 1\" }],\n *   plans_only: true\n * }\n *\n * The output will be:\n * [\n *   [\"Lichtenberg\"],\n *   [\"Charlottenburg-Wilmersdorf\", \"Friedrichshain-Kreuzberg\"],\n *   [\"Work & economy\"],\n *   [\"information (no participation)\"],\n *   [\"ongoing\"],\n *   [\"liqd\"],\n *   [\"Kiezradar 1\"],\n *   [\"Plans\"]\n * ]\n *\n * @param {Object} searchProfile - The search profile containing filter criteria\n * @returns {string[][]} - A structured list of filter values\n */\nexport const toFilterList = (searchProfile) => {\n  const filters = [\n    searchProfile.districts,\n    searchProfile.topics,\n    searchProfile.project_types,\n    searchProfile.status.map((status) => ({ name: statusNames[status.status] })),\n    searchProfile.organisations,\n    searchProfile.kiezradars\n  ].map((filter) => filter.map(({ name }) => name))\n\n  return [\n    [searchProfile.query_text],\n    ...filters,\n    [searchProfile.plans_only ? plansText : null]\n  ].filter(arr => arr.some(value => value))\n}\n","import React from 'react'\n\nconst ImageWithPlaceholder = ({ src, alt, lazy = true, className, ...rest }) => {\n  const hasImage = src && src.length\n  return hasImage\n    ? (\n      <img\n        src={src}\n        alt={alt}\n        loading={lazy ? 'lazy' : 'eager'}\n        className={className}\n        {...rest}\n      />\n      )\n    : (\n      <picture className={className}>\n        <source type=\"image/webp\" srcSet=\"/static/images/placeholder_tile.webp\" />\n        <source type=\"image/avif\" srcSet=\"/static/images/placeholder_tile.avif\" />\n        <img\n          src=\"/static/images/placeholder_tile.svg\"\n          alt={alt}\n          loading={lazy ? 'lazy' : 'eager'}\n          {...rest}\n          className=\"project-tile__placeholder\"\n        />\n      </picture>\n      )\n}\n\nexport default ImageWithPlaceholder\n","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport ProjectsList from '../projects/ProjectsList'\n\nfunction init () {\n  const projectsList = document.querySelectorAll('[data-projects-list]')\n  projectsList.forEach(el => {\n    const root = createRoot(el)\n    const projects = JSON.parse(el.getAttribute('data-projects') || '[]')\n    const projectsUrl = el.getAttribute('data-projects-url')\n    const topicChoices = JSON.parse(el.getAttribute('data-topic-choices'))\n    root.render(\n      <React.StrictMode>\n        <ProjectsList\n          projects={projects}\n          projectsUrl={projectsUrl}\n          topicChoices={topicChoices}\n        />\n      </React.StrictMode>)\n  })\n}\n\ndocument.addEventListener('DOMContentLoaded', init, false)\ndocument.addEventListener('a4.embed.ready', init, false)\n","/* global django */\nimport React, { forwardRef } from 'react'\nimport { classNames } from 'adhocracy4'\nimport { toLocaleDate } from '../contrib/helpers'\nimport ProjectTilePills from './ProjectTopics'\nimport getTimespan from './get-timespan'\nimport ImageWithPlaceholder from '../contrib/ImageWithPlaceholder'\n\nconst copyrightMissingStr = django.gettext('copyright missing')\nconst copyrightStr = django.gettext('copyright by')\nconst PLACEHOLDER_TILE_COPYRIGHT = 'Senatskanzlei Berlin'\nconst participationEndedStr = django.gettext('Participation ended')\nconst beginsOnStr = django.gettext('Begins on the')\nconst participationProjectsStr = django.gettext('Participation projects')\nconst participationProjectStr = django.gettext('Participation project')\nconst clockIconLabel = django.gettext('Clock')\n\nfunction truncateText (item) {\n  if (item.length > 170) {\n    return item.substring(0, 170) + '...'\n  } else {\n    return item\n  }\n}\n\n// FIXME: change to `ref` when using this component once we are on react v19\n//  see https://react.dev/reference/react/forwardRef\nconst ProjectTile = forwardRef(function ProjectTile ({ project, isHorizontal, topicChoices, isMapTile }, ref) {\n  const statusBarProgress = project.active_phase ? project.active_phase[0] + '%' : null\n  let state = 'past'\n\n  // Plans are always active since we dont change state for them, we only show\n  // projects belonging to them.\n  if (project.active_phase || project.type === 'plan') {\n    state = 'active'\n  } else if (project.future_phase) {\n    state = 'future'\n  }\n\n  return (\n    <a\n      href={project.url}\n      target={project.subtype === 'external' ? '_blank' : '_self'}\n      rel=\"noreferrer\"\n      ref={ref}\n      className={classNames('project-tile', isHorizontal ? 'project-tile--horizontal' : 'project-tile--vertical', isMapTile && 'project-tile--map')}\n      aria-label={project.title}\n    >\n      <div className=\"project-tile__content-wrapper\">\n        <div className={classNames('project-tile__image-wrapper image', isHorizontal ? 'project-tile__image-wrapper--horizontal' : '')}>\n          <ProjectTileIcon access={project.access} />\n          {project.subtype === 'external' && (\n            <div className=\"project-tile__external-indicator\" aria-hidden=\"true\">\n              <i className=\"fas fa-external-link-alt\" />\n            </div>\n          )}\n          <ImageWithPlaceholder\n            src={project.tile_image}\n            alt={project.tile_image_alt_text || project.title}\n            height={490}\n            width={653}\n            className=\"project-tile__image\"\n          />\n          <span className=\"image__copyright\">\n            {!project.tile_image\n              ? copyrightStr + ' ' + PLACEHOLDER_TILE_COPYRIGHT\n              : project.tile_image_copyright\n                ? copyrightStr + ' ' + project.tile_image_copyright\n                : copyrightMissingStr}\n          </span>\n        </div>\n\n        <div className=\"project-tile__body\">\n          {!isMapTile && <span className=\"project-tile__head\">{project.district}</span>}\n          {project.topics?.length > 0 &&\n            <div className=\"project-tile__topics\">\n              <ProjectTilePills project={project} topicChoices={topicChoices} />\n            </div>}\n          <p className=\"project-tile__title title-3\">{project.title}</p>\n          {project.description && !isMapTile && (\n            <p className=\"project-tile__description\">\n              {truncateText(project.description)}\n            </p>\n          )}\n        </div>\n      </div>\n\n      <div className=\"project-tile__status\">\n        {state === 'active' && project.type !== 'plan' && (\n          <>\n            <progress\n              value={project.active_phase[0]}\n              max=\"100\"\n              className=\"status-bar\"\n            >\n              {statusBarProgress}\n            </progress>\n            <span className=\"status-bar__timespan\">\n              <i className=\"far fa-clock\" role=\"img\" aria-label={clockIconLabel} />\n              {getTimespan(project)}\n            </span>\n          </>\n        )}\n        {state === 'active' && project.type === 'plan' && (\n          <p>\n            <i className=\"fas fa-table-cells\" aria-hidden=\"true\" />\n\n            <span className=\"project-tile__plan__count\">{project.published_projects_count}</span>\n            {project.published_projects_count === 1\n              ? participationProjectStr\n              : participationProjectsStr}\n          </p>\n        )}\n        {state === 'past' && <p>{participationEndedStr}</p>}\n        {state === 'future' && <p>{beginsOnStr} {toLocaleDate(project.future_phase, undefined, { month: 'numeric', year: 'numeric', day: 'numeric' })}</p>}\n      </div>\n    </a>\n  )\n})\n\nfunction ProjectTileIcon ({ access }) {\n  const projectType = {\n    1: 'public',\n    2: 'semiPublic',\n    3: 'private'\n  }[access]\n\n  switch (projectType) {\n    case 'semiPublic':\n      return (\n        <div className=\"project-tile__icon\" aria-hidden=\"true\">\n          <i className=\"fa fa-eye\" />\n        </div>\n      )\n\n    case 'private':\n      return (\n        <div className=\"project-tile__icon\" aria-hidden=\"true\">\n          <i className=\"fa fa-lock\" />\n        </div>\n      )\n\n    case 'public':\n    default:\n      return null\n  }\n}\n\nexport default ProjectTile\n","import django from 'django'\nimport React from 'react'\n\nconst planStr = django.gettext('Plan')\n\nconst ProjectTilePills = ({ project, topicChoices }) => {\n  const topicList = project.topics.map((val) => {\n    return topicChoices.find(choice => choice.code === val)?.name\n  })\n\n  if (project.type === 'plan' && topicList.length > 1) {\n    const additionalPills = topicList.length - 1\n    topicList.splice(1, additionalPills, '+1')\n  }\n\n  if (project.topics && project.topics.length > 0) {\n    return (\n      <ul className=\"pill__list pill__list--inline\">\n        {project.type === 'plan' && <li className=\"pill pill--label\">{planStr}</li>}\n        {topicList.map((topic, index) =>\n          <li key={topic + index} className=\"pill pill--topic\">{topic}</li>\n        )}\n      </ul>\n    )\n  }\n}\n\nexport default ProjectTilePills\n","/* global django */\n\nconst remainingStr = django.gettext('remaining')\nconst moreThanStr = django.gettext('More than 1 year remaining')\n\nfunction getTimespan (item) {\n  const timeRemaining = item.active_phase[1].split(' ')\n  const daysRemaining = parseInt(timeRemaining[0])\n  if (daysRemaining > 365) {\n    return (moreThanStr)\n  } else {\n    return (\n      remainingStr + ' ' + item.active_phase[1]\n    )\n  }\n}\n\nexport default getTimespan\n"],"names":["_react","_interopRequireDefault","require","_django","_ProjectTile","_adhocracy","_Spinner","_regenerator","e","t","r","Symbol","n","iterator","o","toStringTag","i","c","prototype","Generator","u","Object","create","_regeneratorDefine2","f","p","y","G","v","a","d","bind","length","l","TypeError","call","done","value","return","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","m","defineProperty","_invoke","enumerable","configurable","writable","translated","showCompletedProjectsHeading","django","gettext","showCompletedProjectsBody","showCompletedProjectsButton","showingProjects","ngettext","noProjectsFound","exports","_ref","initialProjects","projects","projectsUrl","topicChoices","isHorizontal","showMap","searchCompletedProjects","showSearchCompletedProjectsButton","visibleProjects","_React$useState","React","useState","_React$useState2","_slicedToArray2","default","setProjects","_React$useState3","_React$useState4","loading","setLoading","_React$useState5","_React$useState6","announcement","setAnnouncement","useEffect","fetchData","_ref2","_asyncToGenerator2","_callee","response","data","_t","_context","fetch","ok","Error","concat","status","json","console","error","apply","arguments","projectsToShow","interpolate","undefined","count","message","createElement","displayProjects","Fragment","className","role","classNames","map","project","index","key","id","onClick","type","viewBox","url","method","headers","cookie","get","body","JSON","stringify","_jsCookie","isodate","locale","formatStyle","month","day","year","date","Date","Intl","DateTimeFormat","format","b","aSorted","_toConsumableArray2","sort","bSorted","params","entries","reduce","acc","Array","isArray","forEach","val","append","set","URLSearchParams","coords1","coords2","toRad","angle","Math","PI","_coords","lon1","lat1","_coords2","lon2","lat2","deltaLat","deltaLon","haversineFormula","sin","cos","atan2","sqrt","statusNames","plansText","searchProfile","filters","districts","topics","project_types","name","organisations","kiezradars","filter","_ref3","query_text","plans_only","arr","some","_excluded","src","alt","_ref$lazy","lazy","rest","_objectWithoutProperties2","_extends2","srcSet","_client","_ProjectsList","init","document","querySelectorAll","el","root","createRoot","parse","getAttribute","render","StrictMode","addEventListener","WeakMap","__esModule","_typeof","has","hasOwnProperty","getOwnPropertyDescriptor","_interopRequireWildcard","_helpers","_ProjectTopics","_getTimespan","_ImageWithPlaceholder","copyrightMissingStr","copyrightStr","participationEndedStr","beginsOnStr","participationProjectsStr","participationProjectStr","clockIconLabel","ProjectTile","forwardRef","ref","_project$topics","item","isMapTile","statusBarProgress","active_phase","state","future_phase","href","target","subtype","rel","title","ProjectTileIcon","access","tile_image","tile_image_alt_text","height","width","tile_image_copyright","district","description","substring","max","getTimespan","published_projects_count","toLocaleDate","planStr","topicList","_topicChoices$find","find","choice","code","additionalPills","splice","topic","remainingStr","moreThanStr","timeRemaining","split","parseInt"],"ignoreList":[],"sourceRoot":""}