{"version":3,"file":"chunks/f8a4da29b23b96.js","mappings":"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","sources":["webpack:///./resources/js/react/cms-components/careers/careersConfig.ts","webpack:///./resources/js/react/cms-components/careers/careersUtils.ts","webpack:///./resources/js/react/cms-components/careers/JobListings.tsx","webpack:///./resources/js/react/cms-components/careers/FilterSet.tsx","webpack:///./resources/js/react/cms-components/careers/Careers.tsx"],"sourcesContent":["// here is a rundown of the logic for how jobs are categorized:\n// https://hello.atlassian.net/wiki/spaces/HR/pages/359990125/Career+Site+Job+Aid\n\n// this data originates from our 3rd party recruiting platform Lever\n// but is cached in Magnolia and delivered via our own endpoint at /.rest/postings\n\n// options for filtering by team on the 'all jobs' page\n// also each team has it's own page\nconst TEAMS: { [teamKey: string]: string } = {\n    ANALYTICS_AND_DATA_SCIENCE:     'Analytics & Data Science',\n    DESIGN:                         'Design',\n    ENGINEERING:                    'Engineering',\n    MARKETING:                      'Marketing',\n    PRODUCT_MANAGEMENT:             'Product Management',\n    PROGRAM_MANAGEMENT:             'Program Management',\n    RISK_AND_COMPLIANCE:            'Risk & Compliance',\n    SUPPORT:                        'Support',\n    GRADUATES:                      'Graduates',\n    SECURITY_ENGINEERING:           'Security',\n    SRE:                            'Site Reliability Engineering',\n    ATLASSIAN_CORPORATE_ENGINEERING:'Atlassian Corporate Engineering (ACE)',\n    PEOPLE:                         'People',\n    FINANCE_AND_ACCOUNTING:         'Finance & Accounting',\n    SALES:                          'Sales',\n    LEGAL:                          'Legal',\n    INTERNS:                        'Interns',\n    OTHER:                          'Other'\n};\n\n// for the pages that show a single team listings use a separate array that includes\n// 'Associate Product Manager' because it is not really a 'team' but has it's own page\nconst TEAMS_INDIVIDUAL_PAGE: { [teamKey: string]: string } = {\n    ...TEAMS\n};\n\n// options for filtering by location on the 'all jobs' page\n// also each location has it's own page\nconst LOCATIONS = [\n    \"Amsterdam\", \n    \"Ankara\", \n    \"Austin\", \n    \"Bengaluru\", \n    \"Boston\",\n    \"Georgetown\", \n    \"Manila\", \n    \"Mountain View\", \n    \"New York\", \n    \"San Francisco\", \n    \"Sydney\", \n    \"Yokohama\"\n];\n\nconst REGIONS = [\n    \"Australia\",\n    \"New Zealand\",\n    \"France\",\n    \"Germany\",\n    \"India\",\n    \"Japan\",\n    \"Netherlands\",\n    \"Poland\",\n    \"Philippines\",\n    \"Turkey\",\n    \"United Kingdom\",\n    \"Canada\",\n    \"United States\",\n    \"South Korea\"\n];\n\nconst is = test => value => ({\n    result: test === value,\n    logMessage: `matches '${test}'`\n});\n\n/**\n * \n * @param {array} testArray Array of test values\n * @returns {function} takes in a value to return an object\n */\nconst isInArray = testArray => value  => ({\n    result: testArray.map((x) => x.toLowerCase()).includes(value.trim().toLowerCase()),\n    logMessage: `value of '${value}' is included in test array '${testArray}'`\n});\n\nconst CAREERS_CONFIG = {\n    ['categories.team']: {\n        [TEAMS.ANALYTICS_AND_DATA_SCIENCE]: is('Analytics & Data Science'),\n        [TEAMS.DESIGN]:                     isInArray(['Customer Experience', 'Design']),\n        [TEAMS.ENGINEERING]:                is('Engineering'),\n        [TEAMS.MARKETING]:                  is('Marketing'),\n        [TEAMS.PRODUCT_MANAGEMENT]:         is('Product Management'),\n        [TEAMS.PROGRAM_MANAGEMENT]:         is('Program Management'),\n        [TEAMS.RISK_AND_COMPLIANCE]:        is('Risk & Compliance'),\n        [TEAMS.SUPPORT]:                    isInArray(['Support (CSS)', 'CSS', 'Support']),\n        [TEAMS.GRADUATES]:                  is('Graduates'),\n        [TEAMS.SECURITY_ENGINEERING]:       is('Security'),\n        [TEAMS.SRE]:                        isInArray(['Site Reliability Engineering', 'SRE']),\n        [TEAMS.ATLASSIAN_CORPORATE_ENGINEERING]: isInArray(['Atlassian Corporate Engineering (ACE)', 'Corporate Engineering']),\n        [TEAMS.PEOPLE]:                     is('People'),\n        [TEAMS.FINANCE_AND_ACCOUNTING]:     is('Finance & Accounting'),\n        [TEAMS.SALES]:                      is('Sales'),\n        [TEAMS.LEGAL]:                      is('Legal'),\n        [TEAMS.INTERNS]:                    is('Interns'),\n    }\n};\n\nexport { CAREERS_CONFIG, TEAMS, TEAMS_INDIVIDUAL_PAGE, LOCATIONS, REGIONS };","import {\n  CAREERS_CONFIG,\n  TEAMS,\n  TEAMS_INDIVIDUAL_PAGE,\n  REGIONS\n} from \"./careersConfig\";\nimport type {\n  ExtensiblePortalJobPostDetails\n} from \"./careersTypes\";\n\nconst getURLParamSet = (set: Set<any>) => escape(Array.from(set.values()).join(\",\"));\n\nexport const updateURLParams = (team: Set<string>, location: Set<string>, search: string) => {\n  window.history.replaceState(\n    null,\n    document.title,\n    `?team=${getURLParamSet(team)}` +\n      `&location=${getURLParamSet(location)}` +\n      `&search=${search}`\n  );\n}\n\nexport const getIcimsFilteredPostingsState = ({\n  searchStr,\n  postingIdsByTeam,\n  team,\n  location: selectedLocationFilters,\n  postingsById\n}: {\n  searchStr: string,\n  allTeams: string[],\n  postingIdsByTeam: { [team: string]: number[] },\n  team: Set<string>,\n  location: Set<string>,\n  postingsById: { [id: number]: ExtensiblePortalJobPostDetails }\n}) => {\n  let filteredPostingIdsByTeam: { [team: string]: number[] } = {};\n\n  // Initialize filtered IDs by team\n  if(team.size) {\n    team.forEach((teamStr) => {\n      filteredPostingIdsByTeam[teamStr] = postingIdsByTeam[teamStr] || [];\n    });\n  } else {\n    filteredPostingIdsByTeam = { ...postingIdsByTeam };\n  }\n\n  // Filter IDs by location\n  if(selectedLocationFilters.size) {\n    const selectedLocationFiltersArray = Array.from(selectedLocationFilters);\n    for(let team in filteredPostingIdsByTeam) {\n      filteredPostingIdsByTeam[team] = filteredPostingIdsByTeam[team].filter(\n        (postingId) => selectedLocationFiltersArray.some((selectedLocation) => postingsById[postingId].locationCountries?.includes(selectedLocation))\n      );\n    }\n  }\n\n  // Filter by search\n  if(searchStr) {\n    for(let team in filteredPostingIdsByTeam) {\n      filteredPostingIdsByTeam[team] = filteredPostingIdsByTeam[team].filter(\n        (postingId) => postingsById[postingId].searchText?.includes(searchStr.toLowerCase())\n      );\n    }\n  }\n\n  const filteredIdsSet = new Set<number>();\n  Object.values(filteredPostingIdsByTeam).forEach((ids) => {\n    ids.forEach((id) => {\n      filteredIdsSet.add(id);\n    });\n  });\n\n  return {\n    numSearchResults: filteredIdsSet.size,\n    filteredPostingIdsByTeam\n  };\n};\n\n// log each time a job is categorized and why\nlet logJobCategorizations = false;\n\n// given a dot delimited path and a JS object return the child object (if it exists),\n// for example the 'costcenter' object from \"requisition.customfields.costcenter\"\nconst getObjFromPath = (path: string, src: ExtensiblePortalJobPostDetails) => {\n  let pathParts = path.split(\".\");\n  do {\n    src = src[pathParts.shift()];\n  } while (pathParts.length && src);\n\n  return src;\n};\n\n// use the careers config object to determine which teams each job should be categorized under\nconst getTeamsToAdd = (posting: ExtensiblePortalJobPostDetails, teamsList: string[]) =>\n  Object.keys(CAREERS_CONFIG).reduce((addedTeams, path) => {\n    const teamMap = CAREERS_CONFIG[path];\n    const testValue = getObjFromPath(path, posting);\n\n    if (testValue)\n      for (let teamKey of Object.keys(teamMap)) {\n        if (!teamsList.includes(teamKey)) return addedTeams; // only include teams we are actually showing\n\n        const { result, logMessage } = teamMap[teamKey](testValue, posting);\n        if (result) {\n          if (logJobCategorizations)\n          \n            logTableData.push({\n              id: posting.id,\n              title: posting.text,\n              team: teamKey,\n              reason:\n                `${path.slice(path.lastIndexOf(\".\") + 1)} ` +\n                `is '${testValue}' ${logMessage}`\n            });\n\n          addedTeams = addedTeams.concat(teamKey);\n        }\n      }\n\n    return addedTeams;\n  }, []);\n\nexport const getFilterMap = (filterKeys: string[], filterValues: Set<string>) =>\n  filterKeys.reduce(\n    (filterMap, filterKey) => ({\n      ...filterMap,\n      [filterKey]: filterValues.has(filterKey)\n    }),\n    {}\n  );\n\nexport const checkFilter = (filterSet: Set<string>, filter: string) =>\n  filterSet.size === 0 || filterSet.has(filter);\n\nexport const splitAddToSet = (set: Set<string>, valuesStr: string) =>\n  valuesStr && valuesStr.split(\",\").forEach(value => set.add(value));\n\n// for displaying number of postings in each filter category (both locations and teams)\nconst numPostingsByFilter = new Map();\nREGIONS.forEach(region => numPostingsByFilter.set(region, 0));\n\nconst addToFilterCount = (filterKey: string) =>\n  numPostingsByFilter.set(\n    filterKey,\n    (numPostingsByFilter.get(filterKey) || 0) + 1\n  );\n\n// add job to a team if it has not already been added\nconst addIdToTeam = (team: string, id: string, idsByTeam: { [team: string]: string[] }) => {\n  const existingTeamList = idsByTeam[team];\n  const exists = existingTeamList && existingTeamList.includes(id);\n\n  if (existingTeamList && !exists) existingTeamList.push(id);\n  else if (!existingTeamList) idsByTeam[team] = [id];\n\n  if (!exists) addToFilterCount(team);\n};\n\n// store job categorization data if logging is enabled\nconst logTableData = [];\n\n// build map of posting id to text to search on\nconst searchTextById = new Map();\n\n// categorize jobs by team while assembling list of teams and locations\nexport const processIcimsJobPostings = (\n  postings: ExtensiblePortalJobPostDetails[],\n  filterToTeam: string[],\n  filterToLocation: string[]\n) => {\n  const postingsById: { [id: string]: ExtensiblePortalJobPostDetails } = {};\n  const postingIdsByTeam: { [team: string]: string[] } = {};\n  const postingLocationCountByTeam: { [team: string]: { [country: string]: number } } = {};\n  \n  const allLocations = REGIONS.slice();\n\n  const teamsMap = filterToTeam.length ? TEAMS_INDIVIDUAL_PAGE : TEAMS;\n  const teamsList = Object.keys(teamsMap).map(key => teamsMap[key]);\n  const allTeams = new Set(teamsList);\n\n  postings.forEach(posting => {\n    postingsById[posting.id] = posting;\n  });\n\n  for(const id in postingsById) {\n    const posting = postingsById[id];\n    posting.text = posting.title;\n    posting.categories = {\n      team: posting.category\n    };\n    posting.tags = [];\n\n    const [primaryCity, primaryCountry] = posting.locations.length ? posting.locations[0].split(' - ') : [''];\n    const primaryLocation = primaryCity.trim();\n    const primaryLocationCountry = primaryCountry ? primaryCountry.trim() : '';\n    \n    posting.locationCountries = [];\n    posting.locationCities = [];\n    posting.locations.forEach((location) => {\n      const [city, country] = location.split(' - ');\n      const locationCountry = country ? country.trim() : '';\n      const locationCity = city ? city.trim() : '';\n\n      if(!posting.locationCountries?.includes(locationCountry)) {\n        posting.locationCountries?.push(locationCountry);\n        addToFilterCount(locationCountry);\n      }\n\n      // Fallback for location mapping out of order (e.g. Canada)\n      // TODO: Revisit after IT has finalized data fields\n      if(!posting.locationCountries?.includes(locationCity)) {\n        posting.locationCountries?.push(locationCity)\n        addToFilterCount(locationCity);\n      }\n\n      if(!posting.locationCities?.includes(locationCity)) {\n        posting.locationCities?.push(locationCity);\n      }\n    });\n\n    posting.location = primaryLocation;\n    posting.locationCountry = primaryLocationCountry;\n    posting.urls = {\n      hostedUrl: `/company/careers/details/${posting.id}`\n    };\n    posting.searchText = `${posting.title} ${posting.category} ${posting.type} ${posting.locations.join(' ')} ${posting.overview} ${posting.qualifications} ${posting.responsibilities}`.toLowerCase();\n\n    // if this is a location page we should not list teams that have no jobs at the location\n    const addTeamToAllTeams = filterToLocation.length === 0;\n\n    const teamsToAdd = getTeamsToAdd(posting, teamsList);\n    \n    // if there no teams for this job to be added to add it the 'Other' team\n    (teamsToAdd.length ? teamsToAdd : [TEAMS.OTHER]).forEach(team => {\n      // use the textContent property of an HTMLElement to strip HTML tags\n      const listsEl = document.createElement(\"div\");\n      listsEl.innerHTML = `${posting.overview}<br />${posting.responsibilities}<br />${posting.qualifications}`;\n\n      addIdToTeam(team || TEAMS.OTHER, id, postingIdsByTeam);\n      if (addTeamToAllTeams) {\n        allTeams.add(team);\n      }\n    });\n\n    const postingCategory = teamsToAdd[0] || TEAMS.OTHER;\n\n    if (!postingLocationCountByTeam[postingCategory]) {\n      postingLocationCountByTeam[postingCategory] = {};\n    };\n\n    if (!postingLocationCountByTeam[postingCategory][primaryCountry]) {\n      postingLocationCountByTeam[postingCategory][primaryCountry] = 0;\n    };\n\n    postingLocationCountByTeam[postingCategory][primaryCountry]++;\n  }\n  \n  return {\n    postingsById,\n    postingIdsByTeam,\n    numPostingsByFilter,\n    searchTextById,\n    postingLocationCountByTeam,\n\n    allLocations: allLocations.sort(),\n    allTeams: [...allTeams].sort()\n  };\n};\n","import React, { Component } from \"react\";\nimport type { Posting } from \"./CareersTypes\";\n\nconst KEY_POSITION_SORT = \"text\";\nconst KEY_LOCATION_SORT = \"location\";\n\nconst timeZoneMap = {\n  pt: \"America/Los_Angeles\",\n  ct: \"America/Chicago\",\n  et: \"America/New_York\",\n};\n\nconst listOfModfiedTags = [\"remote pt\", \"remote ct\", \"remote et\"];\n\ntype Props = {\n  team: string;\n  postings: Posting[];\n};\n\ntype State = {\n  sortOnKey: string;\n  sortDir: number;\n};\n\nclass JobListings extends Component<Props, State> {\n  constructor(props: Props) {\n    super(props);\n\n    this.setSort = this.setSort.bind(this);\n    this.getSortClass = this.getSortClass.bind(this);\n\n    this.state = {\n      sortOnKey: KEY_LOCATION_SORT,\n      sortDir: 1,\n    };\n  }\n\n  setSort(sortOnKey: string) {\n    this.setState({\n      sortOnKey,\n      sortDir: sortOnKey === this.state.sortOnKey ? this.state.sortDir * -1 : 1,\n    });\n  }\n\n  getSortClass(key: string) {\n    return this.state.sortOnKey === key\n      ? this.state.sortDir === 1\n        ? \"asc\"\n        : \"desc\"\n      : \"\";\n  }\n\n  getRemoteTag(tags: string[]) {\n    const isRemoteEligible = tags.filter((tag) =>\n      tag.trim().toLowerCase().includes(\"remote\")\n    );\n    const remoteTag =\n      isRemoteEligible.length > 0\n        ? this.getModifiedRemoteTag(isRemoteEligible[0])\n        : \"\";\n    return remoteTag;\n  }\n\n  getModifiedRemoteTag(tag: string) {\n    let returnTagText = tag;\n    const isTimeZoneSpecific = listOfModfiedTags.includes(\n      tag.trim().toLowerCase()\n    );\n    if (isTimeZoneSpecific) {\n      const timeZoneOptionKey = tag.split(\" \")[1].trim().toLowerCase();\n      const dateTimeTimeZone = new Intl.DateTimeFormat(\"en-US\", {\n        timeZone: timeZoneMap[timeZoneOptionKey],\n        timeZoneName: \"short\",\n      })\n        .formatToParts(new Date())\n        .filter((dateTimeParts) => dateTimeParts.type === \"timeZoneName\");\n      if (dateTimeTimeZone) {\n        const timeZoneAbbre = dateTimeTimeZone[0].value;\n        returnTagText = `Remote ${timeZoneAbbre}`;\n      }\n    }\n    return ` or ${returnTagText}`;\n  }\n\n  render() {\n    const { team, postings } = this.props;\n    const { sortOnKey, sortDir } = this.state;\n\n    return (\n      postings.length != 0 && (\n        <div>\n          {team && <h3>{team}</h3>}\n          <table>\n            <tbody>\n              <tr>\n                {[\n                  [KEY_POSITION_SORT, \"Position\"],\n                  [KEY_LOCATION_SORT, \"Location\"],\n                ].map(({ 0: key, 1: label }) => (\n                  <th\n                    key={key}\n                    className={this.getSortClass(key)}\n                    onClick={() => this.setSort(key)}\n                  >\n                    {label}\n                  </th>\n                ))}\n              </tr>\n              {postings\n                .sort(\n                  (postingA, postingB) =>\n                    sortDir *\n                    (postingA[sortOnKey] > postingB[sortOnKey] ? 1 : -1)\n                )\n                .map(\n                  ({\n                    id,\n                    text,\n                    location,\n                    locationCities,\n                    urls: { hostedUrl },\n                    tags,\n                  }) => {\n                    let remoteText = this.getRemoteTag(tags);\n\n                    const remoteCityIndex = locationCities.findIndex(\n                      (city: string) => city.toLowerCase() === \"remote\"\n                    );\n                    remoteText =\n                      remoteCityIndex > -1\n                        ? ` or ${locationCities[remoteCityIndex]}`\n                        : \"\";\n\n                    return (\n                      <tr key={id}>\n                        <td>\n                          <a href={hostedUrl}>{text}</a>\n                        </td>\n                        <td>\n                          {locationCities[0]}\n                          {remoteText}\n                        </td>\n                      </tr>\n                    );\n                  }\n                )}\n            </tbody>\n          </table>\n        </div>\n      )\n    );\n  }\n}\n\nexport default JobListings;\n","import React from \"react\";\n\nconst NUM_COLUMNS = 2;\n\nconst FilterSetColumn = ({\n  numPostingsByFilter,\n  filtersKeys,\n  filtersMap,\n  setFilter\n}) => (\n  <ul>\n    {filtersKeys.map(filterKey => (\n      <li key={filterKey} className={filtersMap[filterKey] ? \"selected\" : \"\"}>\n        <label>\n          <input\n            onChange={({ target: { checked } }) =>\n              setFilter(filterKey, checked)\n            }\n            type=\"checkbox\"\n            checked={filtersMap[filterKey] ? \"checked\" : false}\n          />\n          <span />\n          {filterKey} ({numPostingsByFilter.get(filterKey) || 0})\n        </label>\n      </li>\n    ))}\n  </ul>\n);\n\nconst splitArray = (array, divisor) => {\n  const arrays = [];\n  const splitIndex = Math.ceil(array.length / divisor);\n\n  for (let i = 0; i < Math.ceil(array.length / splitIndex); i++)\n    arrays.push(array.slice(i * splitIndex, i * splitIndex + splitIndex));\n\n  return arrays;\n};\n\nconst FilterSet = ({ numPostingsByFilter, filtersMap, setFilter }) => (\n  <div className=\"filter-set\">\n    {splitArray(Object.keys(filtersMap), NUM_COLUMNS).map(filterKeyArray => (\n      <FilterSetColumn\n        numPostingsByFilter={numPostingsByFilter}\n        key={filterKeyArray[0]}\n        filtersKeys={filterKeyArray}\n        filtersMap={filtersMap}\n        setFilter={setFilter}\n      />\n    ))}\n  </div>\n);\n\nexport default FilterSet;\n","import React, { Component } from \"react\";\nimport axios from \"axios\";\n\nimport url from \"../../../utils/url\";\n\nimport {\n  updateURLParams,\n  processIcimsJobPostings,\n  getFilterMap,\n  getIcimsFilteredPostingsState,\n  splitAddToSet,\n} from \"./careersUtils\";\nimport JobListings from \"./JobListings\";\nimport FilterSet from \"./FilterSet\";\nimport type { ExtensiblePortalJobPostDetails } from \"./CareersTypes\";\nimport { REGIONS } from \"./careersConfig\";\n\nconst ENDPOINT = \"/endpoint/careers/listings\";\n//const ENDPOINT = 'https://wac.stg.internal.atlassian.com/endpoint/careers/listings';\n\nconst KEY_TEAM_FILTER = \"team\";\nconst KEY_LOCATION_FILTER = \"location\";\n\ntype Props = {\n  location: string;\n  team: string;\n  noentries: string;\n  browseJobsSubText: string;\n};\n\ntype State = {\n  postingsById: { [id: string]: ExtensiblePortalJobPostDetails };\n  postingIdsByTeam: Map<string, string[]> | null;\n  filteredPostingIdsByTeam: { [team: string]: string[] } | null;\n  numSearchResults?: number;\n  numPostingsByFilter?: Map<string, number>;\n  postingLocationCountByTeam?: { [team: string]: { [country: string]: number } };\n  allTeams: string[] | null;\n  allLocations: string[];\n  team: Set<string>;\n  location: Set<string>;\n  searchStr: string;\n  debugJobs?: string;\n};\n\nclass Careers extends Component<Props, State> {\n  constructor(props: Props) {\n    super(props);\n\n    this.setFilter = this.setFilter.bind(this);\n\n    // check if there are filters selected via URL params\n    const {\n      team: teamsStr,\n      location: locationsStr,\n      search: searchStr,\n      debugJobs,\n    } = url.getUrlParams(window.location.href) || {};\n\n    const team = new Set<string>();\n    splitAddToSet(team, teamsStr && teamsStr.replace(\"&amp;\", \"&\"));\n\n    const location = new Set<string>();\n    splitAddToSet(location, locationsStr && locationsStr.replace(\"&amp;\", \"&\"));\n\n    // if we're on a page for a specific team or location\n    if (this.props.team.length) {\n      const teamList = this.props.team.split(\",\");\n      teamList.forEach((element) => {\n        team.add(element.trim());\n      });\n    }\n\n    if (this.props.location.length) location.add(this.props.location);\n\n    this.state = {\n      postingsById: {},\n      postingIdsByTeam: null,\n      filteredPostingIdsByTeam: null,\n\n      allTeams: [],\n      allLocations: [],\n\n      team,\n      location,\n      searchStr: searchStr ? searchStr : \"\",\n\n      debugJobs,\n    };\n  }\n\n  componentDidMount() {\n    axios.get(ENDPOINT).then(({ data: postings }) => {\n      const {\n        allLocations,\n        allTeams,\n        numPostingsByFilter,\n        searchTextById,\n        postingLocationCountByTeam,\n        postingsById,\n        postingIdsByTeam,\n      } = processIcimsJobPostings(postings, [], []);\n\n      let state = {\n        ...this.state,\n\n        postingsById,\n        postingIdsByTeam,\n\n        numPostingsByFilter,\n        searchTextById,\n        postingLocationCountByTeam,\n\n        allTeams,\n        allLocations,\n      };\n      state = { ...state, ...getIcimsFilteredPostingsState(state) };\n\n      this.setState(state);\n    });\n\n    return;\n  }\n\n  onSearchChange(searchStr: string) {\n    const newSearchStr = searchStr && searchStr.trim().length ? searchStr : \"\";\n    const newState = { ...this.state, searchStr: newSearchStr };\n\n    this.setState({\n      ...newState,\n      ...getIcimsFilteredPostingsState(newState)\n    });\n\n    updateURLParams(this.state.team, this.state.location, newSearchStr);\n  }\n\n  setFilter(propName: string, value: string, selected?: boolean) {\n    const existingSet = this.state[propName];\n    selected ? existingSet.add(value) : existingSet.delete(value);\n    const newFilterSet = new Set(existingSet.values());\n\n    this.setState({\n      [propName]: newFilterSet,\n      ...getIcimsFilteredPostingsState(this.state)\n    });\n\n    updateURLParams(this.state.team, this.state.location, this.state.searchStr);\n  }\n\n  render() {\n    const { team: pageForTeam, location: pageForLocation } = this.props;\n    const {\n      postingsById,\n      filteredPostingIdsByTeam,\n\n      searchStr,\n      numSearchResults,\n      numPostingsByFilter,\n\n      allTeams,\n      allLocations,\n      postingLocationCountByTeam,\n\n      team,\n      location,\n    } = this.state;\n\n    const specificPageValue = pageForTeam || pageForLocation;\n\n\n    let filterPostCountByRegion = new Map(numPostingsByFilter);\n\n\n      if (team.size > 0) {\n        allLocations.forEach(loc => filterPostCountByRegion.set(loc, 0));\n        for (const t of team) {\n          for (const loc of allLocations) {\n            if (postingLocationCountByTeam && postingLocationCountByTeam[t]) {\n              const newCount = (filterPostCountByRegion.get(loc) || 0) + (postingLocationCountByTeam[t][loc] || 0);\n              filterPostCountByRegion.set(loc, newCount);\n            }\n          }\n        }\n      } \n\n    return filteredPostingIdsByTeam ? (\n      <div className=\"careers\">\n        <h1>\n          {specificPageValue ? `${specificPageValue} jobs` : \"Browse jobs\"}\n        </h1>\n        <div\n          dangerouslySetInnerHTML={{ __html: this.props.browseJobsSubText }}\n        />\n        <div className=\"filters\">\n          {!pageForTeam && allTeams.length != 0 && (\n            <div>\n              <h4>WHAT FUNCTION MATCHES YOU?</h4>\n              <FilterSet\n                numPostingsByFilter={numPostingsByFilter}\n                filtersMap={getFilterMap(allTeams, team)}\n                setFilter={this.setFilter.bind(this, KEY_TEAM_FILTER)}\n              />\n            </div>\n          )}\n          {!pageForLocation && allLocations.length != 0 && (\n            <div>\n              <h4>WHERE ARE YOU ELIGIBLE TO WORK?</h4>\n              <FilterSet\n                numPostingsByFilter={filterPostCountByRegion}\n                filtersMap={getFilterMap(allLocations, location)}\n                setFilter={this.setFilter.bind(this, KEY_LOCATION_FILTER)}\n              />\n            </div>\n          )}\n        </div>\n\n        <div className=\"search\">\n          <p>{numSearchResults} results</p>\n          <input\n            type=\"text\"\n            placeholder=\"Search the results\"\n            onChange={(e) => this.onSearchChange(e.target.value)}\n            onClick={(e) => e.target.select()}\n            value={searchStr}\n          />\n          <button onClick={() => this.onSearchChange(\"\")} />\n        </div>\n\n        {Object.keys(filteredPostingIdsByTeam)\n          .sort()\n          .map((team) => {\n            const postings = filteredPostingIdsByTeam[team].map(\n              (id) => postingsById[id]\n            );\n\n            return (\n              <JobListings\n                key={team}\n                team={team}\n                postings={postings}\n              />\n            );\n          })}\n\n        {numSearchResults === 0 && (\n          <div dangerouslySetInnerHTML={{ __html: this.props.noentries }} />\n        )}\n      </div>\n    ) : (\n      <div className=\"careers\">\n        <div>Fetching all {specificPageValue || \"\"} jobs, one moment...</div>\n        <span className=\"aui-icon aui-iconfont-build aui-icon-large loading\" />\n      </div>\n    );\n  }\n}\n\nexport default Careers;\n"],"names":["TEAMS","ANALYTICS_AND_DATA_SCIENCE","DESIGN","ENGINEERING","MARKETING","PRODUCT_MANAGEMENT","PROGRAM_MANAGEMENT","RISK_AND_COMPLIANCE","SUPPORT","GRADUATES","SECURITY_ENGINEERING","SRE","ATLASSIAN_CORPORATE_ENGINEERING","PEOPLE","FINANCE_AND_ACCOUNTING","SALES","LEGAL","INTERNS","OTHER","TEAMS_INDIVIDUAL_PAGE","_objectSpread","REGIONS","is","test","value","result","logMessage","concat","isInArray","testArray","map","x","toLowerCase","includes","trim","CAREERS_CONFIG","_defineProperty","_categoriesTeam","getURLParamSet","set","escape","Array","from","values","join","updateURLParams","team","location","search","window","history","replaceState","document","title","getIcimsFilteredPostingsState","_ref","searchStr","postingIdsByTeam","selectedLocationFilters","postingsById","filteredPostingIdsByTeam","size","forEach","teamStr","selectedLocationFiltersArray","filter","postingId","some","selectedLocation","_postingsById$posting","locationCountries","_postingsById$posting2","searchText","filteredIdsSet","Set","Object","ids","id","add","numSearchResults","getFilterMap","filterKeys","filterValues","reduce","filterMap","filterKey","has","splitAddToSet","valuesStr","split","numPostingsByFilter","Map","region","addToFilterCount","get","searchTextById","processIcimsJobPostings","postings","filterToTeam","filterToLocation","postingLocationCountByTeam","allLocations","slice","teamsMap","length","teamsList","keys","key","allTeams","posting","_loop","text","categories","category","tags","_ref3","_slicedToArray","locations","primaryCity","primaryCountry","primaryLocation","primaryLocationCountry","locationCities","_posting$locationCoun","_posting$locationCoun3","_posting$locationCiti","_posting$locationCoun2","_posting$locationCoun4","_posting$locationCiti2","_location$split2","city","country","locationCountry","locationCity","push","urls","hostedUrl","type","overview","qualifications","responsibilities","addTeamToAllTeams","teamsToAdd","addedTeams","path","teamMap","testValue","src","pathParts","shift","getObjFromPath","_i","_Object$keys","teamKey","_teamMap$teamKey","getTeamsToAdd","createElement","innerHTML","idsByTeam","existingTeamList","exists","addIdToTeam","postingCategory","sort","KEY_POSITION_SORT","KEY_LOCATION_SORT","timeZoneMap","pt","ct","et","listOfModfiedTags","_Component","_inherits","JobListings","_super","props","_this","_classCallCheck","call","setSort","bind","_assertThisInitialized","getSortClass","state","sortOnKey","sortDir","this","setState","isRemoteEligible","tag","getModifiedRemoteTag","returnTagText","timeZoneOptionKey","dateTimeTimeZone","Intl","DateTimeFormat","timeZone","timeZoneName","formatToParts","Date","dateTimeParts","timeZoneAbbre","_this2","_this$props","_this$state","React","label","className","onClick","postingA","postingB","_ref2","remoteText","getRemoteTag","remoteCityIndex","findIndex","href","Component","FilterSetColumn","filtersKeys","filtersMap","setFilter","onChange","checked","target","array","divisor","arrays","splitIndex","Math","ceil","i","splitArray","filterKeyArray","Careers","url","teamsStr","locationsStr","debugJobs","replace","element","axios","then","data","_processIcimsJobPosti","newSearchStr","newState","propName","selected","existingSet","newFilterSet","_this3","pageForTeam","pageForLocation","specificPageValue","filterPostCountByRegion","loc","_step","_iterator","_createForOfIteratorHelper","s","n","done","_step2","t","_iterator2","newCount","err","e","f","dangerouslySetInnerHTML","__html","browseJobsSubText","FilterSet","placeholder","onSearchChange","select","noentries"],"sourceRoot":""}