From 0539bedc84789600fd22ba681874fd4320a9767e Mon Sep 17 00:00:00 2001 From: log101 Date: Wed, 17 Jul 2024 18:23:55 +0300 Subject: [PATCH] feat: add standalone templates --- bun.lockb | Bin 258182 -> 272477 bytes package.json | 40 +++++------ src/components/LockedContent/templates.ts | 80 +++++++++++++++++++++ src/components/locked-content-lit.ts | 82 ++++++++++++++++++---- 4 files changed, 169 insertions(+), 33 deletions(-) create mode 100644 src/components/LockedContent/templates.ts diff --git a/bun.lockb b/bun.lockb index c523d85d1e1fb7d2b348462e29ceb710a052e44b..c7dfb49977df4d44a87f3f8c594f597cb6fd6b6f 100755 GIT binary patch delta 48562 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 delta 41829 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 diff --git a/package.json b/package.json index 5683b2f..4b85dbe 100644 --- a/package.json +++ b/package.json @@ -12,38 +12,38 @@ "dependencies": { "@astrojs/check": "^0.4.1", "@astrojs/node": "^8.3.2", - "@astrojs/react": "^3.0.9", + "@astrojs/react": "^3.6.0", "@astrojs/tailwind": "^5.1.0", - "@astrojs/vercel": "^7.3.1", - "@radix-ui/react-checkbox": "^1.0.4", + "@astrojs/vercel": "^7.7.2", + "@radix-ui/react-checkbox": "^1.1.1", "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-separator": "^1.0.3", - "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-label": "^2.1.0", + "@radix-ui/react-separator": "^1.1.0", + "@radix-ui/react-slot": "^1.1.0", "@types/leaflet": "^1.9.12", - "@types/react": "^18.2.47", - "@types/react-dom": "^18.2.18", - "astro": "^4.1.2", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "astro": "^4.11.6", "class-variance-authority": "^0.7.0", - "clsx": "^2.1.0", - "dayjs": "^1.11.10", + "clsx": "^2.1.1", + "dayjs": "^1.11.11", "htmx.org": "^1.9.12", - "kysely": "^0.26.0", + "kysely": "^0.26.3", "leaflet": "^1.9.4", "lit": "^3.1.4", "lucide-react": "^0.309.0", - "nanoid": "^5.0.4", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "tailwind-merge": "^2.2.0", - "tailwindcss": "^3.4.1", + "nanoid": "^5.0.7", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "tailwind-merge": "^2.4.0", + "tailwindcss": "^3.4.6", "tailwindcss-animate": "^1.0.7", "toastify-js": "^1.12.0", - "typescript": "^5.3.3" + "typescript": "^5.5.3" }, "devDependencies": { - "@types/bun": "^1.0.5", - "@types/google.maps": "^3.54.10", + "@types/bun": "^1.1.6", + "@types/google.maps": "^3.55.11", "@types/toastify-js": "^1.12.3" } } diff --git a/src/components/LockedContent/templates.ts b/src/components/LockedContent/templates.ts new file mode 100644 index 0000000..a824f10 --- /dev/null +++ b/src/components/LockedContent/templates.ts @@ -0,0 +1,80 @@ +import { html, type TemplateResult } from "lit"; + +// This template is shown when user hasn't give geolocation permission yet +// When user click the button user is asked for geolocation permission +function permissionButtonTemplate(onClickHandler: () => void) { + return html` +
+ +
+
+

+ Ne kadar yaklaştığını görmek için aşağıdaki butona bas. +

+ +
+
+
+ `; +} + +// This template is shown when user has given permission but has not arrived yet +function lockedButtonTemplate(icon: TemplateResult<1>, proximityText: string) { + return html`
+ +
+
+

+ İçeriği görmek için konuma gitmelisin! Kalan mesafe: ${proximityText} +

+
+
+
`; +} + +// This template is shown when user has arrived to the target location +// When user click the button counter at the bottom of the page is incremented +// and image is revealed +function unlockedButtonTemplate( + icon: TemplateResult<1>, + onClickHandler: () => void +) { + return html`
+ + +
+
+

İçeriği görmek için butona bas!

+
+
+
`; +} + +export { + lockedButtonTemplate, + unlockedButtonTemplate, + permissionButtonTemplate, +}; diff --git a/src/components/locked-content-lit.ts b/src/components/locked-content-lit.ts index 8044ee3..5a85317 100644 --- a/src/components/locked-content-lit.ts +++ b/src/components/locked-content-lit.ts @@ -22,14 +22,14 @@ export class LockedContent extends LitElement { unsafeCSS(lockedContentStyles), ]; - // Static properties, no accessor attribute disables detecting changes - // as these are readonly attriubtes there is no need to attach setters + // Components properties/attributes, no accessor attribute disables detecting + // changes as these are readonly attriubtes there is no need to attach setters @property({ noAccessor: true }) readonly imageId?: string; @property({ noAccessor: true }) readonly imageURL?: string; @property({ type: Object, noAccessor: true }) readonly targetPosition?: LatLngTuple; - // Reactive state + // Reactive states, template is rendered according to this states @state() protected _hasGeolocationPermission = false; @state() @@ -41,8 +41,37 @@ export class LockedContent extends LitElement { @state() protected _watchId?: number; + // Locked lock icon + lockSVG = html` + + `; + + // Unlocked lock icon + unlockSVG = html` + + + + `; + // This callback will be fired when geolocation info is available successCallback(position: GeolocationPosition) { + // Set hasGeolocationPermission state true to change the template if (!this._hasGeolocationPermission) this._hasGeolocationPermission = true; const pos = { @@ -50,21 +79,29 @@ export class LockedContent extends LitElement { lng: position.coords.longitude, }; + // targetPosition attribute must be set for geolocation feature to work if (!this.targetPosition) return; + // Get target position in latitudes and longitudes const targetLatLng = L.latLng(this.targetPosition); + // Get current position in latitudes and longitudes const currentLatLng = L.latLng(pos); + // Calculate the distance between target and current position in meters const betweenMeters = currentLatLng.distanceTo(targetLatLng); + // Update the proximity text according to the distance remaining if (betweenMeters > 1000) { this._targetProximityText = `${(betweenMeters / 1000).toFixed()} KM`; } else if (betweenMeters > 100) { this._targetProximityText = `${betweenMeters.toFixed(0)} M`; } else { + // If target is close less then 100 meters user has arrived to target location if (this._watchId) { + // Stop watching location navigator.geolocation.clearWatch(this._watchId); + // Update state to reveal the image this._arrived = true; } } @@ -73,6 +110,7 @@ export class LockedContent extends LitElement { // This callback will be fired on geolocation error errorCallback(err: GeolocationPositionError) { let errorMessage; + // Show toast accoring to the error state switch (err.code) { case GeolocationPositionError.PERMISSION_DENIED: errorMessage = @@ -95,18 +133,20 @@ export class LockedContent extends LitElement { Toastify({ text: errorMessage, duration: 3000, - gravity: "top", // `top` or `bottom` - position: "center", // `left`, `center` or `right` - stopOnFocus: true, // Prevents dismissing of toast on hover + gravity: "top", + position: "center", + stopOnFocus: true, style: { background: "black", borderRadius: "6px", margin: "16px", }, - onClick: function () {}, // Callback after click + onClick: function () {}, }).showToast(); } + // This template is shown when user hasn't give geolocation permission yet + // When user click the button user is asked for geolocation permission permissionButtonTemplate() { return html`
@@ -135,13 +175,15 @@ export class LockedContent extends LitElement { `; } + // This template is shown when user has given permission but has not arrived yet lockedButtonTemplate() { return html`
@@ -154,6 +196,9 @@ export class LockedContent extends LitElement {
`; } + // This template is shown when user has arrived to the target location + // When user click the button counter at the bottom of the page is incremented + // and image is revealed unlockedButtonTemplate() { return html`
@@ -175,8 +221,9 @@ export class LockedContent extends LitElement {
`; } + // Start watching user location, if user has not given permission yet + // this will ask the user for permission and update the watch id private _startWatchingLocation() { - // start geolocation services const id = navigator.geolocation.watchPosition( this.successCallback.bind(this), this.errorCallback.bind(this), @@ -186,6 +233,8 @@ export class LockedContent extends LitElement { this._watchId = id; } + // This counter is shown at the bottom of the page and incremented + // each time "show content" button is clicked private async _incrementUnlockCounter(id: string | undefined) { if (id) { fetch(`http://localhost:3000/api/location/increment/${id}`, { @@ -197,6 +246,8 @@ export class LockedContent extends LitElement { connectedCallback(): void { super.connectedCallback(); + // Check geolocation permission, if user has given permission before + // start watching user location navigator.permissions .query({ name: "geolocation" }) .then((permissionStatus) => { @@ -217,6 +268,11 @@ export class LockedContent extends LitElement { render() { let buttonTemplate; + // Determine which template to show, there are 3 states: + // 1 - No geolocation permission given + // 2 - Permission given but has no arrived to target position yet + // 3 - Arrived to target position + // 4 - User did not give geolocation permission if (this._arrived) { buttonTemplate = this.unlockedButtonTemplate.bind(this); } else if (this._hasGeolocationPermission) { @@ -233,7 +289,7 @@ export class LockedContent extends LitElement { ${this._unlocked ? nothing : buttonTemplate()}