New analytics feature (#2150)
* New analytics feature Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com> * Fix eslint swaggerJsdoc Signed-off-by: Gregoire Parant <g.parant@thecodingmachine.com>
This commit is contained in:
parent
5e156ade74
commit
755ca93d49
@ -17,7 +17,7 @@ class AnalyticsClient {
|
||||
}
|
||||
}
|
||||
|
||||
identifyUser(uuid: string, email: string | null) {
|
||||
identifyUser(uuid: string, email: string | null): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.identify(uuid, { uuid, email, wa: true });
|
||||
@ -25,7 +25,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
loggedWithSso() {
|
||||
loggedWithSso(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-logged-sso");
|
||||
@ -33,7 +33,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
loggedWithToken() {
|
||||
loggedWithToken(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-logged-token");
|
||||
@ -41,7 +41,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
enteredRoom(roomId: string, roomGroup: string | null) {
|
||||
enteredRoom(roomId: string, roomGroup: string | null): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("$pageView", { roomId, roomGroup });
|
||||
@ -50,7 +50,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
openedMenu() {
|
||||
openedMenu(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-opened-menu");
|
||||
@ -58,7 +58,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
launchEmote(emote: string) {
|
||||
launchEmote(emote: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-emote-launch", { emote });
|
||||
@ -66,7 +66,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
enteredJitsi(roomName: string, roomId: string) {
|
||||
enteredJitsi(roomName: string, roomId: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-entered-jitsi", { roomName, roomId });
|
||||
@ -74,7 +74,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
validationName() {
|
||||
validationName(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-name-validation");
|
||||
@ -82,7 +82,7 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
validationWoka(scene: string) {
|
||||
validationWoka(scene: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-woka-validation", { scene });
|
||||
@ -90,12 +90,309 @@ class AnalyticsClient {
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
validationVideo() {
|
||||
validationVideo(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-video-validation");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
/** New feature analytics **/
|
||||
openedChat(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-opened-chat");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
openRegister(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-opened-register");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
openInvite(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-opened-invite");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
lockDiscussion(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_lockroom");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
screenSharing(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa-screensharing");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
follow(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_follow");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
camera(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_camera");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
microphone(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_microphone");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingMicrophone(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_microphone", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingCamera(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_camera", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingNotification(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_notification", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingFullscreen(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_fullscreen", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingAskWebsite(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_ask_website", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingRequestFollow(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_request_follow", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
settingDecreaseAudioVolume(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_setting_decrease_audio_volume", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
login(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_login");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
logout(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_logout");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
switchMultiIframe(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_multiiframe_switch");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
closeMultiIframe(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_multiiframe_close");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
fullScreenMultiIframe(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_multiiframe_fullscreen");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
stackOpenCloseMultiIframe(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_multiiframe_stack_open_close");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
menuCredit(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_credit");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
menuProfile(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_profile");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
menuSetting() {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_setting");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
menuInvite(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_invite");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
globalMessage(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_globalmessage");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
menuContact(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_contact");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
inviteCopyLink(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_invite_copylink");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
inviteCopyLinkWalk(value: string): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_menu_invite_copylink_walk", {
|
||||
checkbox: value,
|
||||
});
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
editCompanion(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_edit_companion");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
editCamera(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_edit_camera");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
editName(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_edit_name");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
editWoka(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_edit_woka");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
selectWoka(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_wokascene_select");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
|
||||
selectCustomWoka(): void {
|
||||
this.posthogPromise
|
||||
?.then((posthog) => {
|
||||
posthog.capture("wa_wokascene_custom");
|
||||
})
|
||||
.catch((e) => console.error(e));
|
||||
}
|
||||
}
|
||||
export const analyticsClient = new AnalyticsClient();
|
||||
|
@ -17,6 +17,7 @@
|
||||
import { followRoleStore, followStateStore, followUsersStore } from "../Stores/FollowStore";
|
||||
import { gameManager } from "../Phaser/Game/GameManager";
|
||||
import { currentPlayerGroupLockStateStore } from "../Stores/CurrentPlayerGroupStore";
|
||||
import { analyticsClient } from "../Administration/AnalyticsClient";
|
||||
|
||||
const gameScene = gameManager.getCurrentGameScene();
|
||||
|
||||
@ -89,6 +90,7 @@
|
||||
class="btn-follow"
|
||||
class:hide={($peerStore.size === 0 && $followStateStore === "off") || $silentStore}
|
||||
class:disabled={$followStateStore !== "off"}
|
||||
on:click={() => analyticsClient.follow()}
|
||||
on:click={followClick}
|
||||
>
|
||||
<img class="noselect" src={followImg} alt="" />
|
||||
@ -98,6 +100,7 @@
|
||||
class="btn-lock"
|
||||
class:hide={$peerStore.size === 0 || $silentStore}
|
||||
class:disabled={$currentPlayerGroupLockStateStore}
|
||||
on:click={() => analyticsClient.lockDiscussion()}
|
||||
on:click={lockClick}
|
||||
>
|
||||
<img class="noselect" src={lockImg} alt="" />
|
||||
@ -105,6 +108,7 @@
|
||||
|
||||
<div
|
||||
class="btn-monitor"
|
||||
on:click={() => analyticsClient.screenSharing()}
|
||||
on:click={screenSharingClick}
|
||||
class:hide={!$screenSharingAvailableStore || $silentStore}
|
||||
class:enabled={$requestedScreenSharingState}
|
||||
@ -116,7 +120,12 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="btn-video" on:click={cameraClick} class:disabled={!$requestedCameraState || $silentStore}>
|
||||
<div
|
||||
class="btn-video"
|
||||
on:click={() => analyticsClient.camera()}
|
||||
on:click={cameraClick}
|
||||
class:disabled={!$requestedCameraState || $silentStore}
|
||||
>
|
||||
{#if $requestedCameraState && !$silentStore}
|
||||
<img class="noselect" src={cinemaImg} alt="Turn on webcam" />
|
||||
{:else}
|
||||
@ -124,7 +133,12 @@
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
<div class="btn-micro" on:click={microphoneClick} class:disabled={!$requestedMicrophoneState || $silentStore}>
|
||||
<div
|
||||
class="btn-micro"
|
||||
on:click={() => analyticsClient.microphone()}
|
||||
on:click={microphoneClick}
|
||||
class:disabled={!$requestedMicrophoneState || $silentStore}
|
||||
>
|
||||
{#if $requestedMicrophoneState && !$silentStore}
|
||||
<img class="noselect" src={microphoneImg} alt="Turn on microphone" />
|
||||
{:else}
|
||||
|
@ -10,6 +10,7 @@
|
||||
import { coWebsiteManager } from "../../WebRtc/CoWebsiteManager";
|
||||
|
||||
import uploadFile from "../images/jitsi.png";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
export let index: number;
|
||||
export let coWebsite: CoWebsite;
|
||||
@ -89,6 +90,7 @@
|
||||
class:ready={$state === "ready"}
|
||||
class:displayed={isMain || isHighlight}
|
||||
class:vertical
|
||||
on:click={() => analyticsClient.stackOpenCloseMultiIframe()}
|
||||
on:click={onClick}
|
||||
>
|
||||
<img
|
||||
|
@ -2,6 +2,7 @@
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
import { gameManager } from "../../Phaser/Game/GameManager";
|
||||
import { startLayerNamesStore } from "../../Stores/StartLayerNamesStore";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
let entryPoint: string = $startLayerNamesStore[0];
|
||||
let walkAutomatically: boolean = false;
|
||||
@ -54,16 +55,26 @@
|
||||
class="link-url nes-input is-dark"
|
||||
value={location.toString()}
|
||||
/>
|
||||
<button type="button" class="nes-btn is-primary" on:click={copyLink}>{$LL.menu.invite.copy()}</button>
|
||||
<button
|
||||
type="button"
|
||||
class="nes-btn is-primary"
|
||||
on:click={() => analyticsClient.inviteCopyLink()}
|
||||
on:click={copyLink}>{$LL.menu.invite.copy()}</button
|
||||
>
|
||||
</section>
|
||||
{:else}
|
||||
<section class="is-mobile">
|
||||
<h3>{$LL.menu.invite.description()}</h3>
|
||||
<input type="hidden" readonly id="input-share-link" value={location.toString()} />
|
||||
<button type="button" class="nes-btn is-primary" on:click={shareLink}>{$LL.menu.invite.share()}</button>
|
||||
<button
|
||||
type="button"
|
||||
class="nes-btn is-primary"
|
||||
on:click={() => analyticsClient.inviteCopyLink()}
|
||||
on:click={shareLink}>{$LL.menu.invite.share()}</button
|
||||
>
|
||||
</section>
|
||||
{/if}
|
||||
<h3>Select an entry point</h3>
|
||||
<h3>{$LL.menu.invite.selectEntryPoint()}</h3>
|
||||
<section class="nes-select is-dark starting-points">
|
||||
<select
|
||||
bind:value={entryPoint}
|
||||
@ -81,11 +92,12 @@
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
bind:checked={walkAutomatically}
|
||||
on:change={(e) => analyticsClient.inviteCopyLinkWalk(e.currentTarget.value)}
|
||||
on:change={() => {
|
||||
updateInputFieldValue();
|
||||
}}
|
||||
/>
|
||||
<span>{$LL.menu.invite.walk_automatically_to_position()}</span>
|
||||
<span>{$LL.menu.invite.walkAutomaticallyToPosition()}</span>
|
||||
</label>
|
||||
</section>
|
||||
</div>
|
||||
|
@ -18,6 +18,7 @@
|
||||
import type { Unsubscriber } from "svelte/store";
|
||||
import { sendMenuClickedEvent } from "../../Api/iframe/Ui/MenuItem";
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
let activeSubMenu: MenuItem = $subMenusStore[0];
|
||||
let activeComponent: typeof ProfileSubMenu | typeof CustomSubMenu = ProfileSubMenu;
|
||||
@ -47,21 +48,27 @@
|
||||
activeSubMenu = menu;
|
||||
switch (menu.key) {
|
||||
case SubMenusInterface.settings:
|
||||
analyticsClient.menuSetting();
|
||||
activeComponent = SettingsSubMenu;
|
||||
break;
|
||||
case SubMenusInterface.profile:
|
||||
analyticsClient.menuProfile();
|
||||
activeComponent = ProfileSubMenu;
|
||||
break;
|
||||
case SubMenusInterface.invite:
|
||||
analyticsClient.menuInvite();
|
||||
activeComponent = GuestSubMenu;
|
||||
break;
|
||||
case SubMenusInterface.aboutRoom:
|
||||
analyticsClient.menuCredit();
|
||||
activeComponent = AboutRoomSubMenu;
|
||||
break;
|
||||
case SubMenusInterface.globalMessages:
|
||||
analyticsClient.globalMessage();
|
||||
activeComponent = (await import("./GlobalMessagesSubMenu.svelte")).default;
|
||||
break;
|
||||
case SubMenusInterface.contact:
|
||||
analyticsClient.menuContact();
|
||||
activeComponent = ContactSubMenu;
|
||||
break;
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
import { ADMIN_URL } from "../../Enum/EnvironmentVariable";
|
||||
import { showShareLinkMapModalStore } from "../../Stores/ModalStore";
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
function showMenu() {
|
||||
menuVisiblilityStore.set(!get(menuVisiblilityStore));
|
||||
@ -42,7 +43,8 @@
|
||||
class="nes-pointer"
|
||||
draggable="false"
|
||||
on:dragstart|preventDefault={noDrag}
|
||||
on:click|preventDefault={showInvite}
|
||||
on:click={() => analyticsClient.openInvite()}
|
||||
on:click={showInvite}
|
||||
/>
|
||||
<img
|
||||
src={logoRegister}
|
||||
@ -50,7 +52,8 @@
|
||||
class="nes-pointer"
|
||||
draggable="false"
|
||||
on:dragstart|preventDefault={noDrag}
|
||||
on:click|preventDefault={register}
|
||||
on:click={() => analyticsClient.openRegister()}
|
||||
on:click={register}
|
||||
/>
|
||||
{:else}
|
||||
<img
|
||||
@ -59,7 +62,8 @@
|
||||
class="nes-pointer"
|
||||
draggable="false"
|
||||
on:dragstart|preventDefault={noDrag}
|
||||
on:click|preventDefault={showMenu}
|
||||
on:click={() => analyticsClient.openedMenu()}
|
||||
on:click={showMenu}
|
||||
/>
|
||||
{/if}
|
||||
<img
|
||||
@ -68,7 +72,8 @@
|
||||
class="nes-pointer"
|
||||
draggable="false"
|
||||
on:dragstart|preventDefault={noDrag}
|
||||
on:click|preventDefault={showChat}
|
||||
on:click={() => analyticsClient.openedMenu()}
|
||||
on:click={showChat}
|
||||
/>
|
||||
</main>
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
import Woka from "../Woka/Woka.svelte";
|
||||
import Companion from "../Companion/Companion.svelte";
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
function disableMenuStores() {
|
||||
menuVisiblilityStore.set(false);
|
||||
@ -62,19 +63,39 @@
|
||||
<div class="customize-main">
|
||||
<div class="submenu">
|
||||
<section>
|
||||
<button type="button" class="nes-btn" on:click|preventDefault={openEditNameScene}>
|
||||
<button
|
||||
type="button"
|
||||
class="nes-btn"
|
||||
on:click={() => analyticsClient.editName()}
|
||||
on:click={openEditNameScene}
|
||||
>
|
||||
<img src={btnProfileSubMenuIdentity} alt={$LL.menu.profile.edit.name()} />
|
||||
<span class="btn-hover">{$LL.menu.profile.edit.name()}</span>
|
||||
</button>
|
||||
<button type="button" class="nes-btn" on:click|preventDefault={openEditSkinScene}>
|
||||
<button
|
||||
type="button"
|
||||
class="nes-btn"
|
||||
on:click={() => analyticsClient.editWoka()}
|
||||
on:click={openEditSkinScene}
|
||||
>
|
||||
<Woka userId={-1} placeholderSrc="" width="26px" height="26px" />
|
||||
<span class="btn-hover">{$LL.menu.profile.edit.woka()}</span>
|
||||
</button>
|
||||
<button type="button" class="nes-btn" on:click|preventDefault={openEditCompanionScene}>
|
||||
<button
|
||||
type="button"
|
||||
class="nes-btn"
|
||||
on:click={() => analyticsClient.editCompanion()}
|
||||
on:click={openEditCompanionScene}
|
||||
>
|
||||
<Companion userId={-1} placeholderSrc={btnProfileSubMenuCompanion} width="26px" height="26px" />
|
||||
<span class="btn-hover">{$LL.menu.profile.edit.companion()}</span>
|
||||
</button>
|
||||
<button type="button" class="nes-btn" on:click|preventDefault={openEnableCameraScene}>
|
||||
<button
|
||||
type="button"
|
||||
class="nes-btn"
|
||||
on:click={() => analyticsClient.editCamera()}
|
||||
on:click={openEnableCameraScene}
|
||||
>
|
||||
<img src={btnProfileSubMenuCamera} alt={$LL.menu.profile.edit.camera()} />
|
||||
<span class="btn-hover">{$LL.menu.profile.edit.camera()}</span>
|
||||
</button>
|
||||
@ -89,13 +110,15 @@
|
||||
{/if}
|
||||
</section>
|
||||
<section>
|
||||
<button type="button" class="nes-btn" on:click|preventDefault={logOut}
|
||||
<button type="button" class="nes-btn" on:click={() => analyticsClient.logout()} on:click={logOut}
|
||||
>{$LL.menu.profile.logout()}</button
|
||||
>
|
||||
</section>
|
||||
{:else}
|
||||
<section>
|
||||
<a type="button" class="nes-btn" href="/login">{$LL.menu.profile.login()}</a>
|
||||
<a type="button" class="nes-btn" href="/login" on:click={() => analyticsClient.login()}
|
||||
>{$LL.menu.profile.login()}</a
|
||||
>
|
||||
</section>
|
||||
{/if}
|
||||
</div>
|
||||
|
@ -10,6 +10,7 @@
|
||||
import { audioManagerVolumeStore } from "../../Stores/AudioManagerStore";
|
||||
|
||||
import infoImg from "../images/info.svg";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
let fullscreen: boolean = localUserStore.getFullscreen();
|
||||
let notification: boolean = localUserStore.getNotification() === "granted";
|
||||
@ -191,11 +192,21 @@
|
||||
</div>
|
||||
</div>
|
||||
<label>
|
||||
<input type="checkbox" class="nes-checkbox is-dark" bind:checked={valueCameraPrivacySettings} />
|
||||
<input
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
on:change={(event) => analyticsClient.settingCamera(event.currentTarget.value)}
|
||||
bind:checked={valueCameraPrivacySettings}
|
||||
/>
|
||||
<span>{$LL.menu.settings.privacySettings.cameraToggle()}</span>
|
||||
</label>
|
||||
<label>
|
||||
<input type="checkbox" class="nes-checkbox is-dark" bind:checked={valueMicrophonePrivacySettings} />
|
||||
<input
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
on:change={(event) => analyticsClient.settingMicrophone(event.currentTarget.value)}
|
||||
bind:checked={valueMicrophonePrivacySettings}
|
||||
/>
|
||||
<span>{$LL.menu.settings.privacySettings.microphoneToggle()}</span>
|
||||
</label>
|
||||
</section>
|
||||
@ -211,6 +222,7 @@
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
bind:checked={fullscreen}
|
||||
on:change={(event) => analyticsClient.settingFullscreen(event.currentTarget.value)}
|
||||
on:change={changeFullscreen}
|
||||
/>
|
||||
<span>{$LL.menu.settings.fullscreen()}</span>
|
||||
@ -220,6 +232,7 @@
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
bind:checked={notification}
|
||||
on:change={(event) => analyticsClient.settingNotification(event.currentTarget.value)}
|
||||
on:change={changeNotification}
|
||||
/>
|
||||
<span>{$LL.menu.settings.notifications()}</span>
|
||||
@ -229,6 +242,7 @@
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
bind:checked={forceCowebsiteTrigger}
|
||||
on:change={(event) => analyticsClient.settingAskWebsite(event.currentTarget.value)}
|
||||
on:change={changeForceCowebsiteTrigger}
|
||||
/>
|
||||
<span>{$LL.menu.settings.cowebsiteTrigger()}</span>
|
||||
@ -238,6 +252,7 @@
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
bind:checked={ignoreFollowRequests}
|
||||
on:change={(event) => analyticsClient.settingRequestFollow(event.currentTarget.value)}
|
||||
on:change={changeIgnoreFollowRequests}
|
||||
/>
|
||||
<span>{$LL.menu.settings.ignoreFollowRequest()}</span>
|
||||
@ -246,6 +261,7 @@
|
||||
type="checkbox"
|
||||
class="nes-checkbox is-dark"
|
||||
bind:checked={decreaseAudioPlayerVolumeWhileTalking}
|
||||
on:change={(event) => analyticsClient.settingDecreaseAudioVolume(event.currentTarget.value)}
|
||||
on:change={changeDecreaseAudioPlayerVolumeWhileTalking}
|
||||
/>
|
||||
<span>{$LL.audio.manager.reduce()}</span>
|
||||
|
@ -3,6 +3,7 @@
|
||||
import { SelectCharacterScene, SelectCharacterSceneName } from "../../Phaser/Login/SelectCharacterScene";
|
||||
import LL from "../../i18n/i18n-svelte";
|
||||
import { customizeAvailableStore, selectedCollection } from "../../Stores/SelectCharacterSceneStore";
|
||||
import { analyticsClient } from "../../Administration/AnalyticsClient";
|
||||
|
||||
export let game: Game;
|
||||
|
||||
@ -40,13 +41,15 @@
|
||||
<button
|
||||
type="submit"
|
||||
class="selectCharacterSceneFormSubmit nes-btn is-primary"
|
||||
on:click|preventDefault={cameraScene}>{$LL.woka.selectWoka.continue()}</button
|
||||
on:click={() => analyticsClient.selectWoka()}
|
||||
on:click={cameraScene}>{$LL.woka.selectWoka.continue()}</button
|
||||
>
|
||||
{#if $customizeAvailableStore}
|
||||
<button
|
||||
type="submit"
|
||||
class="selectCharacterSceneFormCustomYourOwnSubmit nes-btn"
|
||||
on:click|preventDefault={customizeScene}>{$LL.woka.selectWoka.customize()}</button
|
||||
on:click={() => analyticsClient.selectCustomWoka()}
|
||||
on:click={customizeScene}>{$LL.woka.selectWoka.customize()}</button
|
||||
>
|
||||
{/if}
|
||||
</section>
|
||||
|
@ -2,7 +2,6 @@ import { get, writable } from "svelte/store";
|
||||
import Timeout = NodeJS.Timeout;
|
||||
import { userIsAdminStore } from "./GameStore";
|
||||
import { CONTACT_URL, IDENTITY_URL, PROFILE_URL } from "../Enum/EnvironmentVariable";
|
||||
import { analyticsClient } from "../Administration/AnalyticsClient";
|
||||
import type { Translation } from "../i18n/i18n-types";
|
||||
import axios from "axios";
|
||||
import { localUserStore } from "../Connexion/LocalUserStore";
|
||||
@ -14,7 +13,6 @@ export const userIsConnected = writable(false);
|
||||
export const profileAvailable = writable(true);
|
||||
|
||||
menuVisiblilityStore.subscribe((value) => {
|
||||
if (value) analyticsClient.openedMenu();
|
||||
if (userIsConnected && value && IDENTITY_URL != null) {
|
||||
axios.get(getMeUrl()).catch((err) => {
|
||||
console.error("menuVisiblilityStore => err => ", err);
|
||||
|
@ -8,6 +8,7 @@ import { isMediaBreakpointDown } from "../Utils/BreakpointsUtils";
|
||||
import { LayoutMode } from "./LayoutManager";
|
||||
import type { CoWebsite } from "./CoWebsite/CoWesbite";
|
||||
import type CancelablePromise from "cancelable-promise";
|
||||
import { analyticsClient } from "../Administration/AnalyticsClient";
|
||||
|
||||
export enum iframeStates {
|
||||
closed = 1,
|
||||
@ -126,6 +127,7 @@ class CoWebsiteManager {
|
||||
|
||||
const buttonCloseCoWebsite = HtmlUtils.getElementByIdOrFail(cowebsiteCloseButtonId);
|
||||
buttonCloseCoWebsite.addEventListener("click", () => {
|
||||
analyticsClient.closeMultiIframe();
|
||||
const coWebsite = this.getMainCoWebsite();
|
||||
|
||||
if (!coWebsite) {
|
||||
@ -143,6 +145,7 @@ class CoWebsiteManager {
|
||||
|
||||
const buttonFullScreenFrame = HtmlUtils.getElementByIdOrFail(cowebsiteFullScreenButtonId);
|
||||
buttonFullScreenFrame.addEventListener("click", () => {
|
||||
analyticsClient.fullScreenMultiIframe();
|
||||
buttonFullScreenFrame.blur();
|
||||
this.fullscreen();
|
||||
});
|
||||
@ -159,6 +162,7 @@ class CoWebsiteManager {
|
||||
});
|
||||
|
||||
buttonSwipe.addEventListener("click", () => {
|
||||
analyticsClient.switchMultiIframe();
|
||||
const mainCoWebsite = this.getMainCoWebsite();
|
||||
const highlightedEmbed = get(highlightedEmbedScreen);
|
||||
if (highlightedEmbed?.type === "cowebsite") {
|
||||
|
@ -77,7 +77,8 @@ const menu: NonNullable<Translation["menu"]> = {
|
||||
description: "Link zu diesem Raum teilen!",
|
||||
copy: "Kopieren",
|
||||
share: "Teilen",
|
||||
walk_automatically_to_position: "Automatisch zu meiner Position gehen",
|
||||
walkAutomaticallyToPosition: "Automatisch zu meiner Position gehen",
|
||||
selectEntryPoint: "Select an entry point",
|
||||
},
|
||||
globalMessage: {
|
||||
text: "Text",
|
||||
|
@ -77,7 +77,8 @@ const menu: BaseTranslation = {
|
||||
description: "Share the link of the room!",
|
||||
copy: "Copy",
|
||||
share: "Share",
|
||||
walk_automatically_to_position: "Walk automatically to my position",
|
||||
walkAutomaticallyToPosition: "Walk automatically to my position",
|
||||
selectEntryPoint: "Select an entry point",
|
||||
},
|
||||
globalMessage: {
|
||||
text: "Text",
|
||||
|
@ -77,7 +77,8 @@ const menu: NonNullable<Translation["menu"]> = {
|
||||
description: "Partager le lien de la salle!",
|
||||
copy: "Copier",
|
||||
share: "Partager",
|
||||
walk_automatically_to_position: "Marcher automatiquement jusqu'à ma position",
|
||||
walkAutomaticallyToPosition: "Marcher automatiquement jusqu'à ma position",
|
||||
selectEntryPoint: "Selectionner la zone de départ",
|
||||
},
|
||||
globalMessage: {
|
||||
text: "Texte",
|
||||
|
@ -77,7 +77,8 @@ const menu: NonNullable<Translation["menu"]> = {
|
||||
description: "分享该房间的链接!",
|
||||
copy: "复制",
|
||||
share: "分享",
|
||||
walk_automatically_to_position: "自动走到我的位置",
|
||||
walkAutomaticallyToPosition: "自动走到我的位置",
|
||||
selectEntryPoint: "Select an entry point",
|
||||
},
|
||||
globalMessage: {
|
||||
text: "文本",
|
||||
|
@ -2,7 +2,6 @@ import { BaseHttpController } from "./BaseHttpController";
|
||||
import * as fs from "fs";
|
||||
import { ADMIN_URL } from "../Enum/EnvironmentVariable";
|
||||
import SwaggerGenerator from "../Services/SwaggerGenerator";
|
||||
import swaggerJsdoc from "swagger-jsdoc";
|
||||
|
||||
export class SwaggerController extends BaseHttpController {
|
||||
routes() {
|
||||
|
Loading…
Reference in New Issue
Block a user