added invite clipboard, fixed caching issue

pull/3/head
Simon Huang 5 years ago
parent 6bbc849a76
commit 3494fc7329

@ -14,7 +14,7 @@
"headers": [ "headers": [
{ {
"key": "Cache-Control", "key": "Cache-Control",
"value": "public, max-age=31536000" "value": "no-cache, no-store, must-revalidate"
} }
] ]
} }

13
package-lock.json generated

@ -4381,6 +4381,14 @@
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40="
}, },
"copy-to-clipboard": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz",
"integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==",
"requires": {
"toggle-selection": "^1.0.6"
}
},
"core-js": { "core-js": {
"version": "3.6.5", "version": "3.6.5",
"resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz",
@ -14032,6 +14040,11 @@
"repeat-string": "^1.6.1" "repeat-string": "^1.6.1"
} }
}, },
"toggle-selection": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
"integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI="
},
"toidentifier": { "toidentifier": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",

@ -17,6 +17,7 @@
"@types/react-dom": "^16.9.4", "@types/react-dom": "^16.9.4",
"@types/react-router": "^5.1.4", "@types/react-router": "^5.1.4",
"@types/react-router-dom": "^5.1.3", "@types/react-router-dom": "^5.1.3",
"copy-to-clipboard": "^3.3.1",
"firebase": "^7.17.1", "firebase": "^7.17.1",
"firebase-functions": "^3.11.0", "firebase-functions": "^3.11.0",
"ionicons": "^5.0.0", "ionicons": "^5.0.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

@ -22,7 +22,7 @@
<meta name="apple-mobile-web-app-capable" content="yes" /> <meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-title" content="Turtle" /> <meta name="apple-mobile-web-app-title" content="Turtle" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" /> <meta name="apple-mobile-web-app-status-bar-style" content="black" />
<link rel="apple-touch-icon" type="image/png" href="%PUBLIC_URL%/assets/icon/favicon.png" /> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="%PUBLIC_URL%/assets/icon/apple-icon.png" />
<link rel="mask-icon" href="%PUBLIC_URL%/assets/icon/favicon.png" /> <link rel="mask-icon" href="%PUBLIC_URL%/assets/icon/favicon.png" />
</head> </head>

@ -3,26 +3,47 @@
} }
.online-header { .online-header {
border-bottom: 1px solid var(--ion-color-primary);
color: var(--ion-color-primary); color: var(--ion-color-primary);
font-size: 20px; font-size: 20px;
align-items: center;
} }
.online-list { .online-list {
padding-top: 0; padding-top: 0;
padding-bottom: 4px; padding-bottom: 0;
} }
.online-item { .online-item {
--padding-start: 12px; --padding-start: 12px;
--min-height: 0; --min-height: 30px;
color: var(--ion-color-secondary); color: var(--ion-color-secondary);
} }
.online-label { .online-label {
margin-top: 8px; margin-top: 0;
margin-bottom: 0; margin-bottom: 0;
} }
ion-backdrop { .clipboard-col {
cursor: default; position: absolute;
bottom: 0;
padding: 0;
}
.clipboard-toolbar {
max-width: 428px;
margin-left: 12px;
padding-right: 16px;
height: 56px;
display: flex;
align-items: center;
--padding-start: 0;
}
.clipboard-input {
border-radius: 5px;
border: 1px solid var(--ion-color-secondary);
max-width: 360px;
text-align: left;
} }

@ -1,6 +1,21 @@
import { IonContent, IonItem, IonLabel, IonList, IonListHeader } from '@ionic/react'; import {
import React from 'react'; IonContent,
IonFabButton,
IonInput,
IonItem,
IonLabel,
IonList,
IonListHeader,
IonToolbar,
IonIcon,
IonRow,
IonCol,
IonToast,
} from '@ionic/react';
import React, { useState, useRef } from 'react';
import './OnlineList.css'; import './OnlineList.css';
import { clipboardOutline } from 'ionicons/icons';
import copy from 'copy-to-clipboard';
type OnlineListProps = { type OnlineListProps = {
pane: string; pane: string;
@ -8,6 +23,14 @@ type OnlineListProps = {
}; };
const OnlineList: React.FC<OnlineListProps> = ({ pane, userList }) => { const OnlineList: React.FC<OnlineListProps> = ({ pane, userList }) => {
const inputRef = useRef<HTMLIonInputElement>(null);
const [showToast, setShowToast] = useState(false);
const copyLink = () => {
copy(window.location.href);
setShowToast(true);
};
return ( return (
<IonContent style={{ display: pane === 'online' ? null : 'none' }} class="online-content"> <IonContent style={{ display: pane === 'online' ? null : 'none' }} class="online-content">
<IonListHeader class="online-header">Online</IonListHeader> <IonListHeader class="online-header">Online</IonListHeader>
@ -20,6 +43,24 @@ const OnlineList: React.FC<OnlineListProps> = ({ pane, userList }) => {
); );
})} })}
</IonList> </IonList>
<IonRow>
<IonCol class="clipboard-col">
<IonListHeader class="online-header">Invite friends!</IonListHeader>
<IonToolbar class="clipboard-toolbar">
<IonInput readonly value={window.location.href} ref={inputRef} class="clipboard-input"></IonInput>
<IonFabButton slot="end" size="small" onClick={copyLink} class="send-button">
<IonIcon icon={clipboardOutline}></IonIcon>
</IonFabButton>
</IonToolbar>
</IonCol>
</IonRow>
<IonToast
isOpen={showToast}
onDidDismiss={() => setShowToast(false)}
message="Room link copied"
color="primary"
duration={2000}
></IonToast>
</IonContent> </IonContent>
); );
}; };

Loading…
Cancel
Save