mirror of
https://github.com/supabase/supabase.git
synced 2026-10-06 09:55:06 +03:00
* mamba init * shader-updates * feat: add better bloom * cleanup * Fix GLTF model loading to respect original material properties Signed-off-by: Piotr Goszczyński <pg@tonik.com> * Fix GLTF model loading to respect original material properties Signed-off-by: Piotr Goszczyński <pg@tonik.com> * stash changes * Update font to Arial in mamba ticket component Signed-off-by: Piotr Goszczyński <pg@tonik.com> * Fix wireframe size in debug mode Signed-off-by: Piotr Goszczyński <pg@tonik.com> * Fix wireframe size in debug mode by attaching to child mesh instead of model Signed-off-by: Piotr Goszczyński <pg@tonik.com> * fix scaling * fix * feat: load png with color material * fix: spline material * add toggling of effects * stash * feat: ticket model * load better model * strcture * fix rotation speed * rotation * fix rotation * new model * prepare final designs * add color palette * feat: add fonts and rendering * render dynamic texture * load all textures * fix: color sace * feat: secret model * improve perf * postprocessing * fix: output pass * improve shaders * increase glitches * cleanup * update colors * remove unused files * add header * feat: ui * fix: raycaster * feat: add button toggling * Improve ui * fix corners positoins * add tunnel effect * fix: dates * add dynamic rocket position rendering * add different logs * feat: add migrations and connect to real data * chore: state cleanup to use reducer Migrate logic to centralized reducer for ease of debugging * feat: add hud layout * add grain effect to hud * limit glitching, move page to main url * add vignette effect * fix: desktop layout * remove vertical space * feat: save secret state on ticket upgrade * feat: make platinum version take priority over secret * add mobile header * remove unnecessary allocations * fix: resize hud * add page scaling for mobile layouts * add ticket scaling based on resolution * adjust mobile styles * fix: resize texture distortion * add gauges mobile breaking points * feat: mobile claim layout * mobile styles * Show ticket referer * rename files * update copy links * add partymode part 1 * feat: og images, lw14 * add presence tracking * add live updates of guages * Update meetups label * update label * username ticket lw14 * add proper subscription on first render * remove green edge * feat: remove species & planet from ticket scene * change urls * feat/mamba-assets: update assets * feat: fix shader grain * add color to shader * remove vertical space * fix: og image generation * fix referal and removing of access token * make urls nicer * feat/mamba-assets: dynamic line break + dynamic background * small adjustments * add trimming to ogimages * minor: missing font file * fix og image line wrapping * remove dot from meetups * improve ticket quality * upss, forgot to commit one file * feat add dynamic og image linking * update static site url * fix low mobile resolution * add banners * simplify banner loading * add missing fonts * fix name breaking to prioritize spaces * update quality based on devicePixelRatio * fix button positioning * revert: feature flags disabling * update start date * limit shader effects and disable axis, potential fix to chrome freeze * feat: init mamba 01 * create narrow ticket scene * narrow scene for ticket and fix follow mouse * fix dates * alternative version * updated ticket page * remove migrations * remove files * prettier * prettier * Fix TS and prettier issues * Fix TS issues * Test * Remove console log * fix updating ticket on share * chore: lw cleanup * fix ticket layout * fix chrome crashes * lower crt intensity * tunnel improvements * fix tunnel effect * chore: z-index and prettier fix * chore: padding * fix double tunnel * chore: font on banners --------- Signed-off-by: Piotr Goszczyński <pg@tonik.com> Co-authored-by: dztonik <dz@tonik.com> Co-authored-by: Jonathan Summers-Muir <MildTomato@users.noreply.github.com> Co-authored-by: Joshen Lim <joshenlimek@gmail.com> Co-authored-by: Francesco Sansalvadore <f.sansalvadore@gmail.com>
120 lines
3.4 KiB
TypeScript
120 lines
3.4 KiB
TypeScript
import { useCallback, useEffect, useState } from 'react'
|
|
import useLw14ConfData from './use-conf-data'
|
|
import supabase from '../supabase'
|
|
import { REALTIME_CHANNEL_STATES, REALTIME_SUBSCRIBE_STATES } from '@supabase/supabase-js'
|
|
|
|
const LW14_TOPIC = 'lw14'
|
|
const GAUGES_UPDATES_EVENT = 'gauges-update'
|
|
|
|
export const usePartymode = () => {
|
|
const [state, dispatch] = useLw14ConfData()
|
|
const [shouldInitialize, setShouldInitialize] = useState(
|
|
state.partymodeStatus === 'on' && !state.realtimeGaugesChannel
|
|
)
|
|
|
|
const createChannelAndSubscribe = useCallback(() => {
|
|
const channel = supabase.channel(LW14_TOPIC, {
|
|
config: {
|
|
broadcast: {
|
|
self: true,
|
|
ack: true,
|
|
},
|
|
},
|
|
})
|
|
|
|
const userStatus = {}
|
|
|
|
return channel
|
|
.on('broadcast', { event: GAUGES_UPDATES_EVENT }, (data) => {
|
|
const { payload } = data
|
|
|
|
dispatch({
|
|
type: 'GAUGES_DATA_FETCHED',
|
|
payload: {
|
|
payloadFill: payload.payload_fill,
|
|
payloadSaturation: payload.payload_saturation,
|
|
meetupsAmount: payload.meetups_amount,
|
|
},
|
|
})
|
|
})
|
|
.on('presence', { event: 'sync' }, () => {
|
|
const newState = channel.presenceState()
|
|
const uniqueUsers = new Set([
|
|
...Object.entries(newState).map(([_, value]) => value[0].presence_ref),
|
|
])
|
|
|
|
dispatch({
|
|
type: 'GAUGES_DATA_FETCHED',
|
|
payload: { peopleOnline: uniqueUsers.size },
|
|
})
|
|
})
|
|
.subscribe(async (status, error) => {
|
|
// console.log('Channel status', status, error)
|
|
await channel.track(userStatus)
|
|
|
|
if (status === REALTIME_SUBSCRIBE_STATES.SUBSCRIBED) {
|
|
dispatch({ type: 'PARTYMODE_ENABLE', payload: channel })
|
|
}
|
|
})
|
|
}, [dispatch])
|
|
|
|
const toggle = useCallback(async () => {
|
|
if (state.partymodeStatus === 'on') {
|
|
await state.realtimeGaugesChannel?.unsubscribe()
|
|
dispatch({ type: 'PARTYMODE_DISABLE' })
|
|
} else {
|
|
createChannelAndSubscribe()
|
|
}
|
|
}, [createChannelAndSubscribe, dispatch, state.partymodeStatus, state.realtimeGaugesChannel])
|
|
|
|
const fetchGaugesData = useCallback(async () => {
|
|
const [{ data: payloadData, error: payloadError }, { data: meetupsData, error: meetupsError }] =
|
|
await Promise.all([
|
|
supabase.rpc('get_payload_data_for_lw14'),
|
|
supabase.rpc('get_meetups_data_for_lw14'),
|
|
])
|
|
|
|
if (payloadError || meetupsError) {
|
|
console.error('Error fetching gauges data', payloadError, meetupsError)
|
|
return
|
|
}
|
|
|
|
dispatch({
|
|
type: 'GAUGES_DATA_FETCHED',
|
|
payload: {
|
|
payloadFill: payloadData.payload_fill,
|
|
payloadSaturation: payloadData.payload_saturation,
|
|
meetupsAmount: meetupsData.meetups_amount,
|
|
},
|
|
})
|
|
}, [dispatch])
|
|
|
|
useEffect(() => {
|
|
if (
|
|
state.partymodeStatus === 'on' &&
|
|
(!state.realtimeGaugesChannel ||
|
|
state.realtimeGaugesChannel.state === REALTIME_CHANNEL_STATES.closed)
|
|
) {
|
|
const channel = createChannelAndSubscribe()
|
|
void fetchGaugesData()
|
|
return () => {
|
|
if (
|
|
state.partymodeStatus === 'off' &&
|
|
state.realtimeGaugesChannel?.state === REALTIME_CHANNEL_STATES.joined
|
|
)
|
|
channel.unsubscribe()
|
|
}
|
|
}
|
|
}, [
|
|
createChannelAndSubscribe,
|
|
fetchGaugesData,
|
|
shouldInitialize,
|
|
state.partymodeStatus,
|
|
state.realtimeGaugesChannel,
|
|
])
|
|
|
|
return {
|
|
toggle,
|
|
}
|
|
}
|