mirror of https://github.com/Budibase/budibase.git
committed by
GitHub
7 changed files with 183 additions and 1 deletions
|
After Width: | Height: | Size: 292 B |
@ -0,0 +1,59 @@ |
|||
<script> |
|||
import analytics from "analytics" |
|||
import { createEventDispatcher } from "svelte" |
|||
import { store } from "builderStore" |
|||
|
|||
const dispatch = createEventDispatcher() |
|||
const feedbackUrl = "https://feedback.budibase.com" |
|||
|
|||
let iframe |
|||
|
|||
// the app @ feedback.budibase.com expects to be loaded |
|||
// in an iframe, and posts messages back. |
|||
// this means that we can submit using the Builder's posthog setup |
|||
window.addEventListener( |
|||
"message", |
|||
function(ev) { |
|||
if (ev.origin !== feedbackUrl) return |
|||
|
|||
if (ev.data.type === "loaded") { |
|||
iframe.setAttribute( |
|||
"style", |
|||
`height:${ev.data.height}px; width:${ev.data.width}px` |
|||
) |
|||
} else if (ev.data.type === "submitted") { |
|||
analytics.submitFeedback(ev.data.data) |
|||
$store.highlightFeedbackIcon = false |
|||
dispatch("finished") |
|||
} |
|||
}, |
|||
false |
|||
) |
|||
</script> |
|||
|
|||
<iframe src={feedbackUrl} title="feedback" bind:this={iframe}> |
|||
<html lang="html"> |
|||
<style> |
|||
body { |
|||
display: flex; |
|||
height: 100%; |
|||
width: 100%; |
|||
justify-content: center; |
|||
align-items: center; |
|||
} |
|||
</style> |
|||
<body> |
|||
<div>Loading...</div> |
|||
</body> |
|||
</html> |
|||
</iframe> |
|||
|
|||
<style> |
|||
iframe { |
|||
border-style: none; |
|||
height: auto; |
|||
overflow-y: hidden; |
|||
overflow-x: hidden; |
|||
min-width: 500px; |
|||
} |
|||
</style> |
|||
@ -0,0 +1,56 @@ |
|||
<script> |
|||
import { FeedbackIcon } from "components/common/Icons/" |
|||
import { Popover } from "@budibase/bbui" |
|||
import { store } from "builderStore" |
|||
|
|||
import FeedbackIframe from "./FeedbackIframe.svelte" |
|||
import analytics from "analytics" |
|||
|
|||
const FIVE_MINUTES = 300000 |
|||
|
|||
let iconContainer |
|||
let popover |
|||
|
|||
setInterval(() => { |
|||
$store.highlightFeedbackIcon = analytics.highlightFeedbackIcon() |
|||
}, FIVE_MINUTES) |
|||
</script> |
|||
|
|||
<span |
|||
class="container" |
|||
bind:this={iconContainer} |
|||
on:click={popover.show} |
|||
class:highlight={$store.highlightFeedbackIcon}> |
|||
<FeedbackIcon /> |
|||
</span> |
|||
<Popover bind:this={popover} anchor={iconContainer} align="right"> |
|||
<FeedbackIframe on:finished={popover.hide} /> |
|||
</Popover> |
|||
|
|||
<style> |
|||
.container { |
|||
cursor: pointer; |
|||
color: var(--grey-7); |
|||
margin: 0 20px 0 0; |
|||
font-weight: 500; |
|||
font-size: 1rem; |
|||
height: 100%; |
|||
display: flex; |
|||
flex: 1; |
|||
align-items: center; |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
.container:hover { |
|||
color: var(--ink); |
|||
font-weight: 500; |
|||
} |
|||
|
|||
.highlight { |
|||
color: var(--blue); |
|||
} |
|||
|
|||
.highlight > :global(svg) { |
|||
filter: drop-shadow(0 0 20px var(--blue)); |
|||
} |
|||
</style> |
|||
Loading…
Reference in new issue