Alternative inbox visuals
This commit is contained in:
		
					parent
					
						
							
								f6650c0b91
							
						
					
				
			
			
				commit
				
					
						b6ce2f957d
					
				
			
		
					 21 changed files with 97 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
 | 
			
		||||
import type { ReactNode } from 'react';
 | 
			
		||||
import React, { useEffect, useState, useMemo } from 'react';
 | 
			
		||||
import classNames from 'classnames';
 | 
			
		||||
import type { LocalizerType } from '../types/Util';
 | 
			
		||||
import * as log from '../logging/log';
 | 
			
		||||
import { SECOND, DAY } from '../util/durations';
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +14,7 @@ export type PropsType = {
 | 
			
		|||
  envelopeTimestamp: number | undefined;
 | 
			
		||||
  hasInitialLoadCompleted: boolean;
 | 
			
		||||
  i18n: LocalizerType;
 | 
			
		||||
  isAlpha: boolean;
 | 
			
		||||
  isCustomizingPreferredReactions: boolean;
 | 
			
		||||
  navTabsCollapsed: boolean;
 | 
			
		||||
  onToggleNavTabsCollapse: (navTabsCollapsed: boolean) => unknown;
 | 
			
		||||
| 
						 | 
				
			
			@ -23,11 +25,14 @@ export type PropsType = {
 | 
			
		|||
  renderStoriesTab: () => JSX.Element;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const PART_COUNT = 16;
 | 
			
		||||
 | 
			
		||||
export function Inbox({
 | 
			
		||||
  firstEnvelopeTimestamp,
 | 
			
		||||
  envelopeTimestamp,
 | 
			
		||||
  hasInitialLoadCompleted,
 | 
			
		||||
  i18n,
 | 
			
		||||
  isAlpha,
 | 
			
		||||
  isCustomizingPreferredReactions,
 | 
			
		||||
  navTabsCollapsed,
 | 
			
		||||
  onToggleNavTabsCollapse,
 | 
			
		||||
| 
						 | 
				
			
			@ -89,7 +94,7 @@ export function Inbox({
 | 
			
		|||
  }, [hasInitialLoadCompleted]);
 | 
			
		||||
 | 
			
		||||
  if (!internalHasInitialLoadCompleted) {
 | 
			
		||||
    let loadingProgress = 0;
 | 
			
		||||
    let loadingProgress = 100;
 | 
			
		||||
    if (
 | 
			
		||||
      firstEnvelopeTimestamp !== undefined &&
 | 
			
		||||
      envelopeTimestamp !== undefined
 | 
			
		||||
| 
						 | 
				
			
			@ -122,11 +127,38 @@ export function Inbox({
 | 
			
		|||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    let logo: JSX.Element;
 | 
			
		||||
    if (isAlpha) {
 | 
			
		||||
      const parts = new Array<JSX.Element>();
 | 
			
		||||
      parts.push(
 | 
			
		||||
        <i key="base" className="Inbox__logo__part Inbox__logo__part--base" />
 | 
			
		||||
      );
 | 
			
		||||
      for (let i = 0; i < PART_COUNT; i += 1) {
 | 
			
		||||
        const isVisible = i <= (loadingProgress * PART_COUNT) / 100;
 | 
			
		||||
        parts.push(
 | 
			
		||||
          <i
 | 
			
		||||
            key={i}
 | 
			
		||||
            className={classNames({
 | 
			
		||||
              Inbox__logo__part: true,
 | 
			
		||||
              'Inbox__logo__part--animated':
 | 
			
		||||
                firstEnvelopeTimestamp !== undefined && loadingProgress !== 0,
 | 
			
		||||
              'Inbox__logo__part--segment': true,
 | 
			
		||||
              'Inbox__logo__part--visible': isVisible,
 | 
			
		||||
            })}
 | 
			
		||||
          />
 | 
			
		||||
        );
 | 
			
		||||
      }
 | 
			
		||||
      logo = <div className="Inbox__logo">{parts}</div>;
 | 
			
		||||
    } else {
 | 
			
		||||
      logo = <div className="module-splash-screen__logo module-img--150" />;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
      <div className="app-loading-screen">
 | 
			
		||||
        <div className="module-title-bar-drag-area" />
 | 
			
		||||
 | 
			
		||||
        <div className="module-splash-screen__logo module-img--150" />
 | 
			
		||||
        {logo}
 | 
			
		||||
 | 
			
		||||
        {envelopeTimestamp === undefined ? (
 | 
			
		||||
          <div className="dot-container">
 | 
			
		||||
            <span className="dot" />
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue