Skip to content

Commit 83ea968

Browse files
author
sheepzh
committed
Guide users to rate
1 parent 9910136 commit 83ea968

File tree

5 files changed

+63
-3
lines changed

5 files changed

+63
-3
lines changed

src/app/components/About/Description.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import InstallationLink from "./InstallationLink"
66
import packageInfo from "@src/package"
77
import { locale } from "@i18n"
88
import "./description.sass"
9+
import metaService from "@service/meta-service"
910

1011
const INSTALLATION_STYLE: StyleValue = {
1112
display: "flex",
@@ -63,7 +64,9 @@ const _default = defineComponent(() => {
6364
<ElText size="large">
6465
🌟&ensp;
6566
{t(msg => msg.about.text.greet)}&ensp;
66-
<a href={webstoreUrl} target="_blank">{t(msg => msg.about.text.rate)}</a>
67+
<a href={webstoreUrl} target="_blank" onClick={() => metaService.saveFlag("rateOpen")}>
68+
{t(msg => msg.about.text.rate)}
69+
</a>
6770
</ElText>
6871
</div>
6972
<div>

src/app/components/Dashboard/index.tsx

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,33 @@ import WeekOnWeek from "./components/WeekOnWeek"
1616
import TopKVisit from "./components/TopKVisit"
1717
import CalendarHeatmapChart from "./components/CalendarHeatmapChart"
1818
import { useRouter } from "vue-router"
19+
import { useRequest } from "@app/hooks/useRequest"
20+
import metaService from "@service/meta-service"
21+
import { t } from "@app/locale"
22+
import { WEBSTORE_PAGE } from "@util/constant/url"
23+
import { getDayLength } from "@util/time"
24+
25+
const INSTALL_DAY_MIN_LIMIT = 30
1926

2027
const _default = defineComponent(() => {
2128
const router = useRouter()
2229
const jump2Help = () => router.push({ path: "/other/help" })
2330
const isNotEnOrZhCn = locale !== "en" && locale !== "zh_CN"
2431
const showHelp = isTranslatingLocale() || isNotEnOrZhCn
32+
const { data: showRate, refresh } = useRequest(async () => {
33+
if (!WEBSTORE_PAGE) return false
34+
const installTime = await metaService.getInstallTime()
35+
if (!installTime) return false
36+
const installedDays = getDayLength(installTime, new Date())
37+
if (installedDays < INSTALL_DAY_MIN_LIMIT) return false
38+
const rateOpen = await metaService.getFlag("rateOpen")
39+
return !rateOpen
40+
})
41+
42+
const handleRate = async () => {
43+
await metaService.saveFlag("rateOpen")
44+
refresh()
45+
}
2546

2647
return () => (
2748
<ContentContainer>
@@ -41,8 +62,14 @@ const _default = defineComponent(() => {
4162
<CalendarHeatmapChart />
4263
</DashboardCard>
4364
</ElRow>
44-
<ElRow v-show={showHelp}>
45-
<span class="help-us-link" onClick={jump2Help}>
65+
<ElRow v-show={showHelp || showRate.value}>
66+
<span class="help-us-link" v-show={showRate.value}>
67+
🌟 {t(msg => msg.about.text.greet)}&ensp;
68+
<a href={WEBSTORE_PAGE} target="_blank" onClick={handleRate}>
69+
{t(msg => msg.about.text.rate)}
70+
</a>
71+
</span>
72+
<span class="help-us-link" v-show={!showRate.value} onClick={jump2Help}>
4673
💡 Help us translate this extension/addon into your native language!
4774
</span>
4875
</ElRow>

src/app/components/Dashboard/style/index.sass

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,10 @@
2323
font-size: 14px
2424
width: 100%
2525
cursor: pointer
26+
.help-us-link
27+
a
28+
font-size: inherit
29+
font-family: inherit
30+
color: var(--el-text-color-primary)
31+
a:visited
32+
color: var(--el-text-color-primary)

src/service/meta-service.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,20 @@ async function getLastBackUp(type: timer.backup.Type): Promise<{ ts: number, msg
7171
return meta?.backup?.[type]
7272
}
7373

74+
async function saveFlag(flag: timer.ExtensionMetaFlag) {
75+
if (!flag) return
76+
const meta = await db.getMeta()
77+
if (!meta.flag) meta.flag = {}
78+
meta.flag[flag] = true
79+
await db.update(meta)
80+
}
81+
82+
async function getFlag(flag: timer.ExtensionMetaFlag) {
83+
if (!flag) return false
84+
const meta = await db.getMeta()
85+
return !!meta?.flag?.[flag]
86+
}
87+
7488
class MetaService {
7589
getInstallTime = getInstallTime
7690
updateInstallTime = updateInstallTime
@@ -92,6 +106,11 @@ class MetaService {
92106
* @since 1.4.7
93107
*/
94108
getLastBackUp = getLastBackUp
109+
/**
110+
* @since 2.2.0
111+
*/
112+
saveFlag = saveFlag
113+
getFlag = getFlag
95114
}
96115

97116
export default new MetaService()

types/timer/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ declare namespace timer {
5151
| 'sk'
5252
| 'mn'
5353

54+
type ExtensionMetaFlag = "rateOpen"
55+
5456
type ExtensionMeta = {
5557
installTime?: number
5658
appCounter?: { [routePath: string]: number }
@@ -69,5 +71,7 @@ declare namespace timer {
6971
msg?: string
7072
}
7173
}
74+
// Flags
75+
flag?: Partial<Record<ExtensionMetaFlag, boolean>>
7276
}
7377
}

0 commit comments

Comments
 (0)