Skip to content

Commit

Permalink
added four new political views
Browse files Browse the repository at this point in the history
  • Loading branch information
its-aazizi committed Dec 12, 2024
2 parents 0702675 + 1eb4e24 commit 4288c12
Show file tree
Hide file tree
Showing 26 changed files with 629 additions and 27 deletions.
15 changes: 1 addition & 14 deletions extra/translation-script-content/update-en.json
Original file line number Diff line number Diff line change
@@ -1,14 +1 @@
{
"georgia_political_view_desc": {
"text": ""
},
"cyprus_political_view_desc": {
"text": ""
},
"palestine_political_view_desc": {
"text": ""
},
"greece_political_view_desc": {
"text": ""
}
}
{}
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

99 changes: 99 additions & 0 deletions src/atomicui/atoms/MapLanguageDropdown/MapLanguageDropdown.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
import { FC, useCallback, useEffect, useRef, useState } from "react";

import { Flex, Text } from "@aws-amplify/ui-react";
import { IconArrow } from "@demo/assets/svgs";
import { appConfig } from "@demo/core/constants";
import { useMap } from "@demo/hooks";
import { useTranslation } from "react-i18next";
import "./styles.scss";

const {
MAP_RESOURCES: { MAP_LANGUAGES }
} = appConfig;

interface MapLanguageDropdownProps {
bordered?: boolean;
arrowIconColor?: string;
width?: string;
disabled?: boolean;
}

const MapLanguageDropdown: FC<MapLanguageDropdownProps> = ({
bordered = false,
arrowIconColor,
width = "100%",
disabled = false
}) => {
const [open, setOpen] = useState(false);
const dropdownRef = useRef<HTMLDivElement>(null);
const { i18n, t } = useTranslation();
const { mapLanguage, setMapLanguage } = useMap();
const mapLanguageDir = i18n.dir(mapLanguage.value);

const handleClickOutside = (event: MouseEvent) => {
if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {
setOpen(false);
}
};

useEffect(() => {
document.addEventListener("mousedown", handleClickOutside);

return () => {
document.removeEventListener("mousedown", handleClickOutside);
};
}, []);

const handleClick = useCallback(
(option: { value: string; label: string }) => {
setMapLanguage(option);
setOpen(false);
},
[setMapLanguage]
);

return (
<div ref={dropdownRef} className="dropdown-container" style={{ width }}>
<div
data-testid="dropdown-trigger-map-language"
style={{ cursor: disabled ? "not-allowed" : "pointer", backgroundColor: disabled ? "#ddd" : "" }}
className={bordered ? `trigger bordered dropdown-${open}` : "trigger"}
onClick={() => !disabled && setOpen(!open)}
>
<p data-testid="dropdown-label" className="dropdown-label" dir={mapLanguageDir}>
{mapLanguage.label}
</p>
<IconArrow
style={{
transform: open ? "rotate(180deg)" : "rotate(0deg)",
width: bordered ? "1rem" : "1.23rem",
height: bordered ? "" : "1.23rem",
fill: arrowIconColor ? arrowIconColor : "var(--primary-color)"
}}
/>
</div>
{open && (
<ul data-testid="dropdown-options" className={bordered ? "options bordered" : "options"}>
{MAP_LANGUAGES.map(({ value, label }) => {
return (
<li
data-testid={value}
key={value}
style={{ display: "flex", justifyContent: "start" }}
onClick={() => handleClick({ value, label })}
>
<Flex gap={0} direction="column" padding="0.46rem 1.23rem">
<Text className="bold small-text" color="var(--tertiary-color)">
{t(label)}
</Text>
</Flex>
</li>
);
})}
</ul>
)}
</div>
);
};

export default MapLanguageDropdown;
1 change: 1 addition & 0 deletions src/atomicui/atoms/MapLanguageDropdown/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as MapLanguageDropdown } from "./MapLanguageDropdown";
117 changes: 117 additions & 0 deletions src/atomicui/atoms/MapLanguageDropdown/styles.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. */
/* SPDX-License-Identifier: MIT-0 */

.dropdown-container {
position: relative;
display: inline-block;

.trigger {
display: flex;
justify-content: center;
align-items: center;
max-width: 18.15rem;
height: 2.46rem;
outline: none;
cursor: pointer;
background-color: transparent;
padding: 0.62rem 1rem;

@media only screen and (max-width: 1023px) {
max-width: unset;
}

&.bordered {
padding: 12px 16px;
min-width: 100%;
border: 1px solid var(--grey-color-3);
border-radius: 7px;
height: 40px;
justify-content: space-between;

.dropdown-label {
color: var(--grey-color);
font-family: "AmazonEmber-Regular";
font-weight: 400;
font-size: 1.08rem;
width: 90%;
}
}

&.bordered.dropdown-true {
border-color: var(--primary-color);
}

&.bordered.dropdown-false {
background-color: var(--grey-color-4);
border: 1px solid var(--grey-color-3);

p {
color: var(--tertiary-color);
}
}

p {
font-family: "AmazonEmber-Bold";
font-size: 1.08rem;
color: var(--primary-color);
margin-right: 0.5rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}

.options {
position: absolute;
right: 0;
display: flex;
flex-direction: column;
width: 21.5rem;
height: 16rem;
overflow: auto;
list-style: none;
background-color: var(--white-color);
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.202633);
border-radius: 0.62rem;
margin-top: 0.62rem;
padding: 0;
z-index: 1;

@media only screen and (max-width: 562px) {
width: 12rem;
left: -10%;
}

&.bordered {
left: 0;
height: auto;
width: 100%;
border-radius: 4px;
max-height: calc(100vh - 40rem);
box-shadow: none;
border: 1px solid var(--grey-color-5);

li {
padding: 0;

&:hover {
background-color: var(--primary-alpha-light-color);
}
}
}

li {
cursor: pointer;
padding: 8px 16px;
user-select: none;

&:hover {
background-color: var(--primary-alpha-light-color);

@media only screen and (min-width: 1023px) {
background-color: rgba(0, 130, 150, 0.08);
}
}
}
}
}
1 change: 1 addition & 0 deletions src/atomicui/atoms/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ export * from "./ExploreButton";
export * from "./NLSearchLoader";
export * from "./ToggleSwitch";
export * from "./PoliticalViewDropdown";
export * from "./MapLanguageDropdown";
3 changes: 2 additions & 1 deletion src/atomicui/molecules/MapButtons/MapButtons.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ const mockUseMapData = {
alpha2: "",
alpha3: "",
desc: faker.random.word()
}
},
mapLanguage: { value: "en", label: "English" }
};

const mockUseGeofenceData = {
Expand Down
13 changes: 11 additions & 2 deletions src/atomicui/molecules/MapButtons/MapButtons.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from "rea

import { Card, Divider, Flex, Placeholder, Text } from "@aws-amplify/ui-react";
import { IconClose, IconDark, IconGeofencePlusSolid, IconLight, IconMapSolid, IconRadar } from "@demo/assets/svgs";
import { PoliticalViewDropdown } from "@demo/atomicui/atoms";
import { MapLanguageDropdown, PoliticalViewDropdown } from "@demo/atomicui/atoms";
import { appConfig } from "@demo/core/constants";
import { useAuth, useGeofence, useMap, useUnauthSimulation } from "@demo/hooks";
import useBottomSheet from "@demo/hooks/useBottomSheet";
Expand Down Expand Up @@ -289,9 +289,18 @@ const MapButtons: FC<MapButtonsProps> = ({
))}
</Flex>
</Flex>
<Flex gap={0} padding="1rem">
<Flex gap={0} padding="1rem" direction="column">
<Text className="bold small-text" marginBottom="0.4rem">
{t("political_views.text")}
</Text>
<PoliticalViewDropdown bordered disabled={mapStyle === MapStyleEnum.SATELLITE} />
</Flex>
<Flex gap={0} padding="1rem" direction="column">
<Text className="bold small-text" marginBottom="0.4rem">
{t("map_languages.text")}
</Text>
<MapLanguageDropdown bordered />
</Flex>
</Flex>
</Flex>
</Flex>
Expand Down
71 changes: 71 additions & 0 deletions src/core/constants/appConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,77 @@ const appConfig = {
{ alpha2: "PS", alpha3: "PSE", desc: "palestine_political_view_desc.text", isSupportedByPlaces: false },
{ alpha2: "GR", alpha3: "GRC", desc: "greece_political_view_desc.text", isSupportedByPlaces: false }
],
MAP_LANGUAGES: [
{ value: "en", label: "English" }, // English
{ value: "ar", label: "العربية" }, // Arabic
{ value: "as", label: "অসমীয়া" }, // Assamese
{ value: "az", label: "Azərbaycan dili" }, // Azerbaijani
{ value: "be", label: "беларуская" }, // Belarusian
{ value: "bg", label: "български" }, // Bulgarian
{ value: "bn", label: "বাংলা" }, // Bengali
{ value: "bs", label: "Bosanski" }, // Bosnian
{ value: "ca", label: "Català" }, // Catalan
{ value: "cs", label: "Čeština" }, // Czech
{ value: "cy", label: "Cymraeg" }, // Welsh
{ value: "da", label: "Dansk" }, // Danish
{ value: "de", label: "Deutsch" }, // German
{ value: "el", label: "Ελληνικά" }, // Greek
{ value: "es", label: "Español" }, // Spanish
{ value: "et", label: "Eesti" }, // Estonian
{ value: "eu", label: "Euskara" }, // Basque
{ value: "fi", label: "Suomi" }, // Finnish
{ value: "fo", label: "Føroyskt" }, // Faroese
{ value: "fr", label: "Français" }, // French
{ value: "ga", label: "Gaeilge" }, // Irish
{ value: "gl", label: "Galego" }, // Galician
{ value: "gn", label: "Avañe'ẽ" }, // Guarani
{ value: "gu", label: "ગુજરાતી" }, // Gujarati
{ value: "he", label: "עברית" }, // Hebrew
{ value: "hi", label: "हिन्दी" }, // Hindi
{ value: "hr", label: "Hrvatski" }, // Croatian
{ value: "hu", label: "Magyar" }, // Hungarian
{ value: "hy", label: "Հայերեն" }, // Armenian
{ value: "id", label: "Bahasa Indonesia" }, // Indonesian
{ value: "is", label: "Íslenska" }, // Icelandic
{ value: "it", label: "Italiano" }, // Italian
{ value: "ja", label: "日本語" }, // Japanese
{ value: "ka", label: "ქართული" }, // Georgian
{ value: "kk", label: "Қазақша" }, // Kazakh
{ value: "km", label: "ភាសាខ្មែរ" }, // Khmer
{ value: "kn", label: "ಕನ್ನಡ" }, // Kannada
{ value: "ko", label: "한국어" }, // Korean
{ value: "ky", label: "Кыргызча" }, // Kyrgyz
{ value: "lt", label: "Lietuvių" }, // Lithuanian
{ value: "lv", label: "Latviešu" }, // Latvian
{ value: "mk", label: "Македонски" }, // Macedonian
{ value: "ml", label: "മലയാളം" }, // Malayalam
{ value: "mr", label: "मराठी" }, // Marathi
{ value: "ms", label: "Bahasa Melayu" }, // Malay
{ value: "mt", label: "Malti" }, // Maltese
{ value: "my", label: "မြန်မာ" }, // Burmese
{ value: "nl", label: "Nederlands" }, // Dutch
{ value: "no", label: "Norsk" }, // Norwegian
{ value: "or", label: "ଓଡ଼ିଆ" }, // Odia
{ value: "pa", label: "ਪੰਜਾਬੀ" }, // Punjabi
{ value: "pl", label: "Polski" }, // Polish
{ value: "pt", label: "Português" }, // Portuguese
{ value: "ro", label: "Română" }, // Romanian
{ value: "ru", label: "Русский" }, // Russian
{ value: "sk", label: "Slovenčina" }, // Slovak
{ value: "sl", label: "Slovenščina" }, // Slovenian
{ value: "sq", label: "Shqip" }, // Albanian
{ value: "sr", label: "Српски" }, // Serbian
{ value: "sv", label: "Svenska" }, // Swedish
{ value: "ta", label: "தமிழ்" }, // Tamil
{ value: "te", label: "తెలుగు" }, // Telugu
{ value: "th", label: "ไทย" }, // Thai
{ value: "tr", label: "Türkçe" }, // Turkish
{ value: "uk", label: "Українська" }, // Ukrainian
{ value: "uz", label: "Oʻzbekcha" }, // Uzbek
{ value: "vi", label: "Tiếng Việt" }, // Vietnamese
{ value: "zh", label: "中文 (简体)" }, // Chinese (Simplified)
{ value: "zh-Hant", label: "中文 (繁體)" } // Chinese (Traditional)
],
GEOFENCE_COLLECTION: "location.aws.com.demo.geofences.GeofenceCollection",
DEVICE_ID_WEB: "web_browser_device",
TRACKER: "location.aws.com.demo.trackers.Tracker",
Expand Down
3 changes: 3 additions & 0 deletions src/hooks/useMap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ const useMap = () => {
setBiasPosition: (biasPosition: number[]) => {
setState({ biasPosition });
},
setMapLanguage: (mapLanguage: { value: string; label: string }) => {
setState({ mapLanguage });
},
resetStore() {
setState({
currentLocationData: undefined
Expand Down
Loading

0 comments on commit 4288c12

Please sign in to comment.