{"id":20643863,"url":"https://github.com/adjust/fe-hometask","last_synced_at":"2026-03-19T16:54:46.617Z","repository":{"id":169331982,"uuid":"645253994","full_name":"adjust/fe-hometask","owner":"adjust","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-21T09:30:53.000Z","size":144,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-03-09T14:41:36.291Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adjust.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-05-25T08:50:54.000Z","updated_at":"2024-08-21T09:30:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"1fef4109-1dab-4ec1-a28b-a41d913ff08a","html_url":"https://github.com/adjust/fe-hometask","commit_stats":null,"previous_names":["adjust/fe-hometask"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adjust/fe-hometask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Ffe-hometask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Ffe-hometask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Ffe-hometask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Ffe-hometask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adjust","download_url":"https://codeload.github.com/adjust/fe-hometask/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adjust%2Ffe-hometask/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30236048,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T19:01:10.287Z","status":"ssl_error","status_checked_at":"2026-03-07T18:59:58.103Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-16T16:14:08.996Z","updated_at":"2026-03-07T23:02:41.193Z","avatar_url":"https://github.com/adjust.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# React \u0026 Rockets\n\n**Description:** Challenge for Adjust Frontend Developer\n\n**Owner:** [adjust](https://github.com/adjust)\n\n**Contacts:** frontend-hiring@adjust.com\n\n---\n\n## Welcome to our little coding exercise! 👋\n\nHere, you will have the opportunity to work with TypeScript and Rockets in the same project. We recommend setting aside 2-3 hours to complete it.\n\n**Please make sure to read this page entirely before starting the challenge.** If you have any questions, feel free to [open an issue](#how-to-request-help) as described at the bottom of this page.\n\n**Important:** We want to give all candidates taking this test an equal opportunity to solve the exercise in their own way. Therefore, **please do not fork or share this repo (nor your solution) with anyone 🙏🏻**\n\n\u003cimg align=\"center\" src=\"https://i.imgur.com/ekyJNd9.jpg\" width=\"600\"\u003e\n\n## Instructions\n\n1. Push your solution to a **private repo** in your **personal GitHub account**.\n2. When you're ready for us to review your work, please add [adjust-frontend-hiring][adjust-frontend-hiring] (GitHub user) as a collaborator.\n\n## General notes\n\n- The final solution must be a working React application.\n  - It's up to you how to bootstrap a new React application.\n- You can use any third-party library if you see a good fit for it.\n- It's not necessary to heavily comment the code; please only leave comments where they are essential for code comprehension. However, we welcome notes and comments that reflect the higher-level decisions made during the challenge.\n- Aspects to be assessed:\n  - Code Style – meaningful naming conventions, consistent code formatting, and emphasis on code readability and future extensibility.\n  - Quality Assurance – the solution you upload should work as expected, conforming to the specifications of the tasks. A solution that produces a different result than specified will not be considered.\n  - Introducing best practices, such as tests and linting, is appreciated.\n\nGood luck and happy coding! 🚀\n\n---\n\n## Exercise\n\n### TASK #1 - TypeScript\n\nImplement the `prepareData` higher-order function, which takes an object of filter parameters `{year, customerName}` and returns a function that processes a list of missions, showing only those launched in the specified `year` and carrying a payload belonging to `customerName`.\n\n**Observations:**\n\n- Missions should appear in inverse chronological order (sorted by the\n  `launch_date_utc` field), except that those carrying more payloads should appear first.\n- Payloads are carried in the second stage of a rocket, and they can belong to multiple customers.\n- It doesn't matter to which `customerName` 'program' each payload belongs, as long as `customerName` is the customer.\n\n**Example:**\n\nConsidering we have a response from the \u003ca href=\"https://api.spacexdata.com/v3/launches/past\" target=\"_blank\"\u003eSpaceX API\u003c/a\u003e and the following filter parameters:\n\n```js\n{\n  year: 2018,\n  customerName: \"NASA\"\n}\n```\n\nThe expected result should be:\n\n```js\n[\n  {\n    flight_number: 62,\n    mission_name: \"Iridium NEXT Mission 6\",\n    payloads_count: 2,\n  },\n  {\n    flight_number: 72,\n    mission_name: \"CRS-16\",\n    payloads_count: 1,\n  },\n  {\n    flight_number: 64,\n    mission_name: \"CRS-15\",\n    payloads_count: 1,\n  },\n  {\n    flight_number: 60,\n    mission_name: \"TESS\",\n    payloads_count: 1,\n  },\n  {\n    flight_number: 59,\n    mission_name: \"CRS-14\",\n    payloads_count: 1,\n  },\n];\n```\n\n---\n\n### TASK #2 - React \u0026 Hooks\n\nImplement the `\u003cRocketsList\u003e` component with the following specifications:\n\n- The component receives a `filterParams` object (with the shape described in [task #1][task-1]) as a prop.\n- The component obtains a list of 'missions' from a [custom hook][custom-hook], which fetches **the entire list of missions** from the [SpaceX API][spacex-api] and processes them using the `prepareData` function (from [task #1][task-1]) and the `filterParams` prop.\n  - The mission data should only be fetched once.\n  - As part of this challenge, you are not allowed to use any of the filter parameters provided by the [SpaceX API docs][spacex-api-docs].\n- For each 'mission' obtained from the custom hook, the component renders a string using [template literals][template-literals] in the following format: \"#`flight_number` `mission_name` (`payloads_count`)\".\n- While 'missions' are being fetched from the API, the component renders `\"Loading...\"` on the screen.\n- If no 'missions' are obtained from the custom hook, the component renders `\"No data\"` on the screen.\n\n**Expected outcome:**\n\nPlease set the `filterParams` to match the example below:\n\n```js\n\u003cRocketsList\n  filterParams={{\n    year: 2018,\n    customerName: \"NASA\",\n  }}\n/\u003e\n```\n\nThe expected render should match the following outcome:\n\n\u003cimg align=\"center\" src=\"img/expected_output.png\" width=\"600\"\u003e\n\nWe will be testing your solution with a small set of E2E tests. Please make sure your solution conforms to the specifications above. Our E2E tests rely on the following facts:\n\n- Your React application starts a development server by running the `npm run start` command.\n- The development server is hosted on `localhost:3000`.\n- `filterParams` are specified as `{ year: 2018, customerName: \"NASA\" }`, as in the example above.\n- The markup is represented as an unordered list, composed of `\u003cul\u003e` and `\u003cli\u003e` HTML elements. Please refer to the example below:\n\n```html\n\u003cul\u003e\n  \u003cli\u003e#62 Iridium NEXT Mission 6 (2)\u003c/li\u003e\n  \u003cli\u003e#72 CRS-16 (1)\u003c/li\u003e\n  ...\n\u003c/ul\u003e\n```\n\n## How to request help\n\nIf you have any questions or doubts, you can reach out to us by [creating a GitHub issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/creating-an-issue#creating-an-issue-from-a-repository) in your private repo.\n\nDescribe your question(s) and [mention](https://docs.github.com/en/github/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#mentioning-people-and-teams) [adjust-frontend-hiring][adjust-frontend-hiring] in your comments (don't forget to add the user as a collaborator). We will receive a notification and get back to you as soon as possible.\n\n## Helpful links\n\n- [SpaceX API Docs][spacex-api-docs]\n- [Inviting collaborators to a personal repository][github-collaborators]\n\n[spacex-api]: https://api.spacexdata.com/v3/launches/past\n[spacex-api-docs]: https://docs.spacexdata.com/?version=latest#fce450d6-e064-499a-b88d-34cc22991bcc\n[github-collaborators]: https://help.github.com/en/articles/inviting-collaborators-to-a-personal-repository\n[task-1]: #task-1---typescript\n[template-literals]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals\n[custom-hook]: https://reactjs.org/docs/hooks-custom.html\n[adjust-frontend-hiring]: https://github.com/adjust-frontend-hiring\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadjust%2Ffe-hometask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadjust%2Ffe-hometask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadjust%2Ffe-hometask/lists"}