@fortawesome/free-solid-svg-icons#faShare TypeScript Examples

The following examples show how to use @fortawesome/free-solid-svg-icons#faShare. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Primary = () => (
  <>
    <Button variant="blue" className="mr-2"> Blue </Button>
    <Button variant="blue" className="mr-2" disabled> Disabled Blue </Button>
    <Button variant="blue" className="mr-2" loading> Loading Blue </Button>
    <Button variant="blue" className="mr-2" bouncy> Bouncy Blue </Button>
    <Button variant="blue" className="mr-2" withIcon icon={faShare}> Blue with icon </Button>
    <Button variant="blue" outline> Outline Blue </Button>
  </>
)
Example #2
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Light = () => (
  <>
    <Button variant="light" className="mr-2"> Light Button </Button>
    <Button variant="light" className="mr-2" disabled> Disabled Light Button </Button>
    <Button variant="light" className="mr-2" loading> Loading Light Button </Button>
    <Button variant="light" className="mr-2" bouncy> Bouncy Light Button </Button>
    <Button variant="light" className="mr-2" withIcon icon={faShare}> Light Button with icon </Button>
    <Button variant="light" outline> Outline Light Button </Button>
  </>
)
Example #3
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Success = () => (
  <>
    <Button variant="success" className="mr-2"> Success </Button>
    <Button variant="success" className="mr-2" disabled> Disabled Success </Button>
    <Button variant="success" className="mr-2" loading> Loading Success </Button>
    <Button variant="success" className="mr-2" bouncy> Bouncy Success </Button>
    <Button variant="success" className="mr-2" withIcon icon={faShare}> Success with icon </Button>
    <Button variant="success" outline> Outline Success </Button>
  </>
)
Example #4
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Danger = () => (
  <>
    <Button variant="danger" className="mr-2"> Danger </Button>
    <Button variant="danger" className="mr-2" disabled> Disabled Danger </Button>
    <Button variant="danger" className="mr-2" loading> Loading Danger </Button>
    <Button variant="danger" className="mr-2" bouncy> Bouncy Danger </Button>
    <Button variant="danger" className="mr-2" withIcon icon={faShare}> Danger with icon </Button>
    <Button variant="danger" outline> Outline Danger </Button>
  </>
)
Example #5
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Yellow = () => (
  <>
    <Button variant="yellow" className="mr-2"> Yellow </Button>
    <Button variant="yellow" className="mr-2" disabled> Disabled Yellow </Button>
    <Button variant="yellow" className="mr-2" loading> Loading Yellow </Button>
    <Button variant="yellow" className="mr-2" bouncy> Bouncy Yellow </Button>
    <Button variant="yellow" className="mr-2" withIcon icon={faShare}> Yellow with icon </Button>
    <Button variant="yellow" outline> Outline Yellow </Button>
  </>
)
Example #6
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Grey = () => (
  <>
    <Button variant="grey" className="mr-2"> Grey </Button>
    <Button variant="grey" className="mr-2" disabled> Disabled Grey </Button>
    <Button variant="grey" className="mr-2" loading> Loading Grey </Button>
    <Button variant="grey" className="mr-2" bouncy> Bouncy Grey </Button>
    <Button variant="grey" className="mr-2" withIcon icon={faShare}> Grey with icon </Button>
    <Button variant="grey" outline> Outline Grey </Button>
  </>
)
Example #7
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Link = () => (
  <>
    <Button variant="link" className="mr-2"> Link </Button>
    <Button variant="link" className="mr-2" disabled> Disabled Link </Button>
    <Button variant="link" className="mr-2" loading> Loading Link </Button>
    <Button variant="link" className="mr-2" bouncy> Bouncy Link </Button>
    <Button variant="link" className="mr-2" withIcon icon={faShare}> Link with icon </Button>
    <Button variant="link" outline> Outline Link </Button>
  </>
)
Example #8
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Gradient = () => (
  <>
    <Button variant="gradient" className="mr-2" gradient={gradient}> Gradient </Button>
    <Button variant="gradient" className="mr-2" disabled gradient={gradient}> Disabled Gradient </Button>
    <Button variant="gradient" className="mr-2" loading gradient={gradient}> Loading Gradient </Button>
    <Button variant="gradient" className="mr-2" bouncy gradient={gradient}> Bouncy Gradient </Button>
    <Button variant="gradient" className="mr-2" withIcon icon={faShare} gradient={gradient}> Gradient with icon </Button>
    <Button variant="gradient" outline gradient={gradient}> Outline Gradient </Button>
  </>
)
Example #9
Source File: CraftEssenceDescriptor.tsx    From apps with MIT License 6 votes vote down vote up
function CommonCraftEssenceDescriptor(props: IPropsCommon & { face?: string; tab?: string }) {
    return (
        <Link
            to={
                `/${props.region}/craft-essence/${props.craftEssence.collectionNo}` + (props.tab ? `/${props.tab}` : "")
            }
            className="descriptor-link"
        >
            {props.face ? (
                <FaceIcon
                    type={Entity.EntityType.SERVANT_EQUIP}
                    rarity={props.craftEssence.rarity}
                    location={props.face}
                    height={props.iconHeight ?? "2em"}
                />
            ) : undefined}
            {props.face ? " " : undefined}
            <span className="hover-text">{props.overwriteName ?? props.craftEssence.name}</span>{" "}
            <FontAwesomeIcon icon={faShare} />
        </Link>
    );
}
Example #10
Source File: Button.stories.tsx    From frontend.ro with MIT License 6 votes vote down vote up
Default = () => (
  <>
    <Button variant="transparent"> Default </Button>
    <Button variant="transparent" className="mr-2" disabled> Disabled Default </Button>
    <Button variant="transparent" className="mr-2" loading> Loading Default </Button>
    <Button variant="transparent" className="mr-2" bouncy> Bouncy Default </Button>
    <Button variant="transparent" className="mr-2" withIcon icon={faShare}> Default with icon </Button>
    <Button variant="transparent" outline> Outline Default </Button>
  </>
)
Example #11
Source File: QuestDescriptor.tsx    From apps with MIT License 6 votes vote down vote up
export function QuestDescriptorMap(props: {
    text?: string;
    region: Region;
    questId: number;
    questPhase?: number;
    questStage?: number;
    quests: Map<number, Quest.QuestBasic>;
    showType?: boolean;
}) {
    const quest = props.quests.get(props.questId);
    if (quest !== undefined && quest !== null) {
        return (
            <QuestDescriptionNoApi
                text={props.text}
                region={props.region}
                quest={quest}
                questPhase={props.questPhase ?? 1}
                questStage={props.questStage}
                showType={props.showType}
            />
        );
    } else {
        return (
            <Link to={`/${props.region}/quest/${props.questId}/${props.questPhase ?? 1}`}>
                Quest {props.questId} <FontAwesomeIcon icon={faShare} />
            </Link>
        );
    }
}
Example #12
Source File: SupportServant.tsx    From apps with MIT License 6 votes vote down vote up
SupportCraftEssenseLink = (props: { region: Region; craftEssence: CraftEssence.CraftEssence }) => {
    const { region, craftEssence } = props;
    if (craftEssence.collectionNo === 0) {
        const faceUrl = craftEssence.extraAssets.equipFace.equip
                ? craftEssence.extraAssets.equipFace.equip[craftEssence.id]
                : undefined,
            title = `Story Support CE ${craftEssence.id}`;
        return (
            <Link to={`/${region}/craft-essence/${craftEssence.id}`} className="descriptor-link">
                {faceUrl !== undefined ? (
                    <>
                        <img src={faceUrl} style={{ height: "1.5em" }} alt={title} />{" "}
                    </>
                ) : null}
                <span className="hover-text">
                    {title} <FontAwesomeIcon icon={faShare} />
                </span>
            </Link>
        );
    }
    return <CraftEssenceDescriptor region={region} craftEssence={craftEssence} />;
}
Example #13
Source File: FuncDescriptor.tsx    From apps with MIT License 5 votes vote down vote up
render() {
        const region = this.props.region,
            func = this.props.func,
            dataVal = this.getDataVal(),
            followerDataVal = this.getFollowerDataVal();

        const sections = new FuncDescriptorSections();

        handleTeamSection(region, sections, func, dataVal);
        handleConditionSection(region, sections, func, dataVal);
        handleChanceSection(region, sections, func, dataVal);
        handleActionSection(region, sections, func, dataVal);
        handleAmountSection(region, sections, func, dataVal);
        handleOnFieldSection(region, sections, func, dataVal);
        handleAffectsSection(region, sections, func, dataVal);
        if (followerDataVal) {
            handleAmountSection(region, sections, func, followerDataVal, true);
        }
        handleTargetSection(region, sections, func, dataVal);
        handleDurationSection(region, sections, func, dataVal);
        handleScalingSection(region, sections, func, dataVal);

        let parts: Renderable[] = [];

        Object.values(sections).forEach((section) => {
            if (!section.showing) return;

            if (section.preposition) parts.push(section.preposition);

            parts = parts.concat(section.parts);
        });

        parts.push(
            <Link to={`/${region}/func/${func.funcId}`}>
                <FontAwesomeIcon icon={faShare} title={`Go to ${region} function ${func.funcId}`} />
            </Link>
        );

        parts = joinElements(parts, " ");

        return (
            <span>
                {parts.map((element, index) => {
                    return <React.Fragment key={index}>{element}</React.Fragment>;
                })}
            </span>
        );
    }
Example #14
Source File: BgmDescriptor.tsx    From apps with MIT License 5 votes vote down vote up
export default function BgmDescriptor(props: {
    region: Region;
    bgm: Bgm.Bgm;
    showName?: string;
    showLink?: boolean;
    style?: React.CSSProperties;
}) {
    const bgm = props.bgm;
    if (bgm.id === 0) {
        return null;
    } else if (bgm.audioAsset !== undefined) {
        const showName = getBgmName(bgm);
        const toLink = props.showLink ? (
            <>
                <Button variant="primary" as={Link} to={`/${props.region}/bgm/${bgm.id}`}>
                    <FontAwesomeIcon icon={faShare} title={`Go to ${props.region} BGM ${showName}`} />
                </Button>
            </>
        ) : null;
        const downloadButton = bgm.notReleased ? (
            <Button disabled variant="secondary" target="_blank" title={showName}>
                {showName}
            </Button>
        ) : (
            <Button variant={"info"} href={bgm.audioAsset} target="_blank" title={`Download ${showName}`}>
                {props.showName ?? showName}&nbsp;
                <FontAwesomeIcon icon={faFileAudio} />
            </Button>
        );
        return (
            <>
                <ButtonGroup size="sm" style={props.style}>
                    <VoiceLinePlayer audioAssetUrls={[bgm.audioAsset]} delay={[0]} title={bgm.name} />
                    {downloadButton}
                    {toLink}
                </ButtonGroup>
            </>
        );
    } else {
        return (
            <Button variant={"info"} disabled style={props.style}>
                {bgm.name}
            </Button>
        );
    }
}
Example #15
Source File: MissionConditionDescriptor.tsx    From apps with MIT License 5 votes vote down vote up
export default function MissionConditionDescriptor(props: {
    region: Region;
    cond: Mission.MissionCondition;
    warIds?: number[];
    goToQuestSearchOnly?: boolean;
    servants?: Map<number, Servant.ServantBasic>;
    quests?: Map<number, Quest.QuestBasic>;
    missions?: Map<number, Mission.Mission>;
    items?: Map<number, Item.Item>;
    enums?: EnumList;
    handleNavigateMissionId?: (id: number) => void;
}) {
    const cond = props.cond;
    let progressType = cond.missionProgressType.toString();
    switch (cond.missionProgressType) {
        case Mission.ProgressType.OPEN_CONDITION:
            progressType = "Unlock condition";
            break;
        case Mission.ProgressType.START:
            progressType = "Show condition";
            break;
        case Mission.ProgressType.CLEAR:
            progressType = "Clear condition";
    }
    return (
        <>
            <i>{progressType}:</i>
            <ul style={{ margin: 0 }}>
                <li className="newline">{props.cond.conditionMessage}</li>
                <li>
                    <CondTargetNumDescriptor
                        region={props.region}
                        cond={cond.condType}
                        targets={cond.targetIds}
                        num={cond.targetNum}
                        detail={cond.detail}
                        servants={props.servants}
                        quests={props.quests}
                        missions={props.missions}
                        items={props.items}
                        enums={props.enums}
                        handleNavigateMissionId={props.handleNavigateMissionId}
                    />
                </li>
                {cond.condType === CondType.MISSION_CONDITION_DETAIL &&
                cond.detail !== undefined &&
                [
                    Mission.DetailCondType.DEFEAT_ENEMY_INDIVIDUALITY,
                    Mission.DetailCondType.ENEMY_INDIVIDUALITY_KILL_NUM,
                ].includes(cond.detail?.missionCondType) ? (
                    props.goToQuestSearchOnly ? (
                        <Link
                            to={`/${props.region}/quests?${getURLSearchParams({
                                type: Quest.QuestType.FREE,
                                enemyTrait: cond.detail.targetIds,
                            }).toString()}`}
                        >
                            Search applicable quests <FontAwesomeIcon icon={faShare} />
                        </Link>
                    ) : (
                        <CollapsibleLight
                            title="Applicable Quests"
                            content={
                                <QuestSearchDescriptor
                                    region={props.region}
                                    warId={props.warIds}
                                    enemyTrait={cond.detail.targetIds}
                                    hideSearchLink={true}
                                    returnList={true}
                                />
                            }
                            eventKey={`${props.region}-${props.warIds}-enemyTraits:${cond.detail.targetIds}`}
                            defaultActiveKey={""}
                        />
                    )
                ) : null}
            </ul>
        </>
    );
}
Example #16
Source File: QuestDescriptor.tsx    From apps with MIT License 5 votes vote down vote up
export function QuestDescriptionNoApi(props: {
    region: Region;
    quest: Quest.QuestBasic;
    questPhase: number;
    text?: string;
    questStage?: number;
    showType?: boolean;
    showPhase?: boolean;
}) {
    const quest = props.quest;
    if (props.text !== undefined && props.text !== "") {
        return (
            <Link to={`/${props.region}/quest/${quest.id}/${props.questPhase}`}>
                {props.text} <FontAwesomeIcon icon={faShare} />
            </Link>
        );
    } else {
        const prefix = Math.floor(quest.id / 1000000);
        let type = "";

        switch (prefix) {
            case 91:
                type = "Interlude/Rank Up Quest";
                break;
            case 94:
                type = "Event Quest";
                break;
        }

        if (quest.warId >= 100 && quest.warId < 200) {
            type = "Part I Quest";
        } else if (quest.warId >= 200 && quest.warId < 300) {
            type = "EOR Quest";
        } else if (quest.warId >= 300 && quest.warId < 400) {
            type = "LB Quest";
        }

        if (quest.type === Quest.QuestType.FRIENDSHIP || quest.warId === 1003) {
            type = "Interlude Quest";
        }

        if (quest.warId === 1001) {
            if (quest.name.startsWith("Rank Up")) {
                type = "";
            } else {
                type = "Rank Up Quest";
            }
        }

        const showType = props.showType ?? true;
        const stageUri = props.questStage ? `/stage-${props.questStage}` : "";
        const phase = props.showPhase ? ` – phase ${props.questPhase}` : "";
        return (
            <Link to={`/${props.region}/quest/${quest.id}/${props.questPhase}${stageUri}`}>
                {showType && type !== "" ? `${type} ` : ""}
                {quest.name}
                {phase} <FontAwesomeIcon icon={faShare} />
            </Link>
        );
    }
}
Example #17
Source File: OptionsDrawer.stories.tsx    From frontend.ro with MIT License 5 votes vote down vote up
OptionsDrawer.args = {
  trigger: {
    text: 'Share',
    icon: faShare,
  },
};
Example #18
Source File: QuestSearchDescriptor.tsx    From apps with MIT License 4 votes vote down vote up
export default function QuestSearchDescriptor(props: IProps) {
    const [quests, setQuests] = useState<Quest.QuestPhaseBasic[]>([]);
    useEffect(() => {
        Api.searchQuestPhase(
            props.name,
            props.spotName,
            props.warId,
            props.type,
            props.flag,
            props.fieldIndividuality,
            props.battleBgId,
            props.bgmId,
            props.fieldAiId,
            props.enemySvtId,
            props.enemySvtAiId,
            props.enemyTrait,
            props.enemyClassName
        )
            .then((s) => setQuests(s))
            .catch(() => {});
    }, [
        props.name,
        props.spotName,
        props.warId,
        props.type,
        props.flag,
        props.fieldIndividuality,
        props.battleBgId,
        props.bgmId,
        props.fieldAiId,
        props.enemySvtId,
        props.enemySvtAiId,
        props.enemyTrait,
        props.enemyClassName,
    ]);
    if (quests.length === 0) {
        return null;
    }

    const maxShowResults = props.hideSearchLink ? quests.length : props.maxNumQuestsShown ?? 10,
        remainingCount = quests.length - maxShowResults,
        queryString = getURLSearchParams({
            name: props.name,
            spotName: props.spotName,
            warId: props.warId,
            type: props.type,
            flag: props.flag,
            fieldIndividuality: props.fieldIndividuality,
            battleBgId: props.battleBgId,
            bgmId: props.bgmId,
            fieldAiId: props.fieldAiId,
            enemySvtId: props.enemySvtId,
            enemySvtAiId: props.enemySvtAiId,
            enemyTrait: props.enemyTrait,
            enemyClassName: props.enemyClassName,
        }).toString();

    const questDescriptions = quests
        .slice(0, maxShowResults)
        .map((quest) => <QuestDescriptionNoApi region={props.region} quest={quest} questPhase={quest.phase} />);

    return (
        <>
            {props.returnList ? (
                <ul style={{ marginBottom: 0 }}>
                    {questDescriptions.map((quest, i) => (
                        <li key={i}>{quest}</li>
                    ))}
                </ul>
            ) : (
                <>
                    {questDescriptions.map((quest, i) => (
                        <div key={i}>
                            {quest}
                            <br />
                        </div>
                    ))}
                </>
            )}
            {remainingCount > 0 ? `and ${remainingCount} other quests. ` : ""}
            {props.hideSearchLink ? null : (
                <Link to={`/${props.region}/quests?${queryString}`}>
                    Go to the quest search page <FontAwesomeIcon icon={faShare} />
                </Link>
            )}
        </>
    );
}
Example #19
Source File: ScriptTable.tsx    From apps with MIT License 4 votes vote down vote up
ScriptBracketRow = (props: {
    region: Region;
    component: ScriptBracketComponent;
    refs: RowBgmRefMap;
    lineNumber?: number;
    wideScreen?: boolean;
}) => {
    const { region, component, refs, lineNumber, wideScreen } = props,
        { windowWidth } = useWindowDimensions(),
        showScriptLine = useContext(ShowScriptLineContext);

    const getGoToLabel = (labelName: string) => {
        return (
            <Button
                variant="link"
                onClick={() => {
                    const rowRef = refs.get(labelName);
                    if (rowRef !== undefined && rowRef.current !== null) {
                        rowRef.current.scrollIntoView({
                            behavior: "smooth",
                        });
                    }
                }}
            >
                <FontAwesomeIcon icon={faShare} title={`Go to label ${labelName}`} />
            </Button>
        );
    };

    switch (component.type) {
        case ScriptComponentType.BGM:
            return (
                <tr ref={refs.get(component.bgm.audioAsset)}>
                    <td>BGM</td>
                    <td>
                        <BgmDescriptor region={region} bgm={component.bgm} />
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        case ScriptComponentType.CRI_MOVIE:
            return (
                <tr>
                    <td>Movie</td>
                    <td>
                        <video controls width={getVideoWidth(windowWidth, wideScreen)}>
                            <source src={component.movieUrl} type="video/mp4" />
                        </video>
                    </td>
                </tr>
            );
        case ScriptComponentType.SOUND_EFFECT:
            return (
                <tr ref={refs.get(component.soundEffect.audioAsset)}>
                    <td>Sound Effect</td>
                    <td>
                        <BgmDescriptor region={region} bgm={component.soundEffect} />
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        case ScriptComponentType.FLAG:
            return (
                <tr>
                    <td>Flag</td>
                    <td>
                        Set flag <code>{component.name}</code> to <code>{component.value}</code>
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        case ScriptComponentType.BRANCH:
            const condition =
                component.flag === undefined ? null : (
                    <>
                        {" "}
                        if <code>{component.flag.name}</code> is <code>{component.flag.value}</code>
                    </>
                );
            return (
                <tr>
                    <td>Branch</td>
                    <td>
                        Go to label <code>{component.labelName}</code>
                        {condition} {getGoToLabel(component.labelName)}
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        case ScriptComponentType.BRANCH_QUEST_NOT_CLEAR:
            return (
                <tr>
                    <td>Branch</td>
                    <td>
                        Go to label <code>{component.labelName}</code> if quest{" "}
                        <QuestDescriptor region={region} questId={component.questId} /> hasn't been cleared{" "}
                        {getGoToLabel(component.labelName)}
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        case ScriptComponentType.BRANCH_MASTER_GENDER:
            return (
                <tr>
                    <td>Branch</td>
                    <td>
                        Go to label <code>{component.maleLabelName}</code> {getGoToLabel(component.maleLabelName)} if
                        chosen gender is male or <code>{component.femaleLabelName}</code>{" "}
                        {getGoToLabel(component.femaleLabelName)} if female
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        case ScriptComponentType.LABEL:
            return (
                <tr ref={refs.get(component.name)}>
                    <td>Label</td>
                    <td>
                        <code>{component.name}</code>
                    </td>
                    {showScriptLine && <td>{lineNumber}</td>}
                </tr>
            );
        default:
            return null;
    }
}
Example #20
Source File: despre-noi.tsx    From frontend.ro with MIT License 4 votes vote down vote up
export default function AboutUsContent() {
  const router = useRouter();
  const [urlToShare, setUrlToShare] = useState(router.pathname);

  const lessonInfo = getLessonById('despre-noi');

  useEffect(() => {
    setUrlToShare(`${window.location.origin}${router.asPath}`);
  }, []);

  return (
    <>
      <LessonCover resizeOffset={100}>
        {/* eslint-disable-next-line react/no-danger */}
        <div dangerouslySetInnerHTML={{
          __html: coverSvg,
        }}
        />

      </LessonCover>
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[0].id}>
          {lessonInfo.chapters[0].title}
        </LessonHeading>
        <p>
          FrontEnd.ro este o comunitate de oameni ce învață FrontEnd de la zero.
        </p>
        <p>
          Comunitatea gravitează în jurul unei serii de lecții și exerciții
          gratuite ce constituie - în opinia noastră - fundamentele unei cariere moderne
          în FrontEnd Development. Deși abia la
          {' '}
          <span className="line-through">prima</span>
          {' '}
          a doua iterație, acestea vor fi
          re-scrise, re-re-scrise și re-re-re-scrise în funcție de feedback-ul vostru
          până când vor ajunge una din cele mai calitative resurse de acest fel din România.
        </p>
      </section>
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[1].id}>
          {lessonInfo.chapters[1].title}
        </LessonHeading>
        <p>
          Noi suntem convinși că:
        </p>
        <LessonQuote variant="centered">
          Nu contează la câte tutoriale te uiți, ci cât de mult codezi
        </LessonQuote>
        <p>
          Însă când înveți singur e puțin mai greu să-ți dai seama dacă rezolvarea
          găsită de tine este cea mai bună. Așa că ne vei trimite aici rezolvările
          la exerciții, iar noi - developeri cu experiență din comunitate -  îți
          vom da feedback pentru fiecare.
        </p>
      </section>
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[2].id}>
          {lessonInfo.chapters[2].title}
        </LessonHeading>
        <p>
          De la început ne-am dorit ca FrontEnd.ro să fie un
          {' '}
          <strong>
            efort de comunitate,
            pentru comunitate
          </strong>
          . Lecțiile, exercițiile, acest site cât și feedback-ul
          pe care voi îl veți primi reprezintă o contribuție voluntară a unor
          developeri cu inimă mare din România.
        </p>
        <p>
          Vrem să oferim șansa la cât
          mai mulți oameni să învețe și să lucreze în acest domeniu, unul din cele mai
          faine din lume, de aceea nu vom pune un preț pe această experiență.
        </p>
      </section>
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[3].id}>
          {lessonInfo.chapters[3].title}
        </LessonHeading>
        <p>
          Dacă folosești platforma să
          {' '}
          <strong>înveți FrontEnd</strong>
          {' '}
          și simți că te-a ajutat, atunci s-ar putea să fie de folos și prietenilor
          tăi. Am aprecia mult un share, așa putem avea un impact cât mai mare:
        </p>
        <div className="d-flex justify-content-center my-5">
          <OptionsDrawer trigger={{ text: 'Share', icon: faShare }}>
            <OptionsDrawer.Element>
              <CopyLinkButton text={urlToShare} />
            </OptionsDrawer.Element>
            <OptionsDrawer.Element>
              <FacebookButton url={urlToShare} />
            </OptionsDrawer.Element>
            <OptionsDrawer.Element>
              <LinkedInButton url={urlToShare} />
            </OptionsDrawer.Element>
            <OptionsDrawer.Element>
              <WhatsAppButton url={urlToShare} />
            </OptionsDrawer.Element>
          </OptionsDrawer>
        </div>
        <p>
          Iar după ce avansezi în skill-uri și capeți mai multă experiență, chiar ne-am bucura
          dacă vei reveni aici, de data aceasta din postura de mentor și să oferi
          înapoi comunității. ?
        </p>
        <p>
          Dacă
          {' '}
          <strong>ești FrontEnd Developer</strong>
          , atunci ne poți ajuta prin oferirea de
          feedback cursanților, crearea de exerciții și lecții sau dezvoltarea
          acestei platforme al cărei cod este
          {' '}
          <a target="_blank" rel="noreferrer" href={GITHUB_URL}>open-source pe GitHub</a>
          .
          {/* Mai mult despre acest proces gasesti in capitolul
                {' '}
                <a href="/intro/implica-te">Cum ajut</a>
                . */}
        </p>
        <p>
          Iar dacă
          {' '}
          <strong>ești o firmă tech și-ți place ce încercăm să facem aici</strong>
          ,
          poate găsim un mod să colaborăm și să ne ajutăm reciproc și comunitatea
          în același timp.
          {/*
            Aruncă un ochi
            {' '}
            <a href="/intro/implica-te">aici</a>
            {' '}
            pentru mai multe detalii.
             */}
        </p>
      </section>
      <div className="dots" />
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[4].id}>
          {lessonInfo.chapters[4].title}
        </LessonHeading>
        <p>
          FrontEnd-ul, de fapt programarea în general, este un domeniu în continuă
          dezvoltare și schimbare.
          În fiecare lună apar lucruri noi, iar în cațiva ani tool-urile pe care
          noi le folosim pot fi complet diferite. Ceea ce face
          lucrurile extrem de interesante, dar și puțin complicate
          când vrei să înveți acest domeniu...
        </p>

        <p>
          Totuși, fundamentele FrontEnd-ului nu se schimbă, și le vei folosi fie că
          construiești un site de prezentare, un magazin online sau următorul
          Instagram. De aceea, aici ne vom ocupa de fundamentele celor
          3 limbaje de programare ce compun FrontEnd-ul:
          {' '}
          <strong>HTML</strong>
          ,
          {' '}
          <strong>CSS</strong>
          {' '}
          și
          {' '}
          <strong>JavaScript</strong>
          . Deocamdată avem lecții și exerciții doar pentru
          primul, cel de HTML, însa după o rundă de feedback de la
          comunitate vom continua și cu celelalte două.
        </p>
      </section>
      <div className="dots" />
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[5].id}>
          {lessonInfo.chapters[5].title}
        </LessonHeading>
        <p>
          Focusul nostru este pe exerciții și feedback, acolo investim cel
          mai mult timp. Există deja o mulțime de articole și tutoriale
          extrem de bune pe internet, așa că am decis ca lecțiile să reprezinte
          doar un
          {' '}
          <strong>scurt rezumat</strong>
          ,  care la final va avea
          {' '}
          <strong>
            link-uri către resurse
            mai detaliate
          </strong>
          . Din această cauză, principala responsabilitate
          la partea de învățare este a ta.
          {' '}
        </p>
        <LessonQuote>
          Ne așteptăm să fii motivat
          și autodidact, să poți înțelege în mare conceptele de unul singur.
        </LessonQuote>
        <p>
          Pentru a învăța cât mai mult, începe cu lecția 0 (cea pe care o citești acum)
          și continuă pe rând cu fiecare lecție nouă. Citește rezumatul nostru, iar
          apoi aruncă un ochi pe resursele suplimentare, înainte să te apuci
          de exerciții.
          {' '}
        </p>
        <p>
          <strong>
            Este foarte important să rezolvi toate exercițiile
            de la fiecare lecție.
          </strong>
          {' '}
          Ai răbdare și încredere în noi, nu am încărcat site-ul cu exerciții inutile.
        </p>
        <p>
          Apoi, după ce ne trimiți soluția ta vom ajunge la
          {' '}
          <strong>partea de feedback</strong>
          .
          Fiind începător probabil vor fi undeva la 3-4-5 runde,
          în care-ți vom explica de ce anumite lucruri nu sunt
          bune și te vom ruga să le schimbi.
        </p>
        <p>
          E extrem de important
          să
          {' '}
          <strong>ai răbdare cu acest proces, și să nu fii prea dur cu tine</strong>
          .
          Bucură-te că ai pe cineva care-ți face Code Review și de la
          care poți să înveți. Mulți dintre noi nu am avut șansa asta.
          Și din nou:
        </p>
        <LessonQuote variant="centered">
          Don't be too hard on yourself.
          Don't take it personal.
          Noi suntem aici să te ajutăm. ?
        </LessonQuote>
      </section>
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[6].id}>
          {lessonInfo.chapters[6].title}
        </LessonHeading>
        <p>
          Unul dintre cele mai faine lucruri la FrontEnd development
          este faptul că nu avem nevoie de prea multe lucruri înainte să începem.
          În primul rând, un
          {' '}
          <strong>calculator</strong>
          {' '}
          și o
          {' '}
          <strong>conexiune la internet</strong>
          .
        </p>
        <p> Apoi, specific pentru acest domeniu ai nevoie de:</p>
        <List as="ol" variant="count">
          <li>
            <strong>un browser modern și cross-platform </strong>
            (ce poate fi instalat pe
            Windows, MacOS și Linux).
            <p>
              Noi recomandăm unul dintre
              {' '}
              <a target="_blank" rel="noreferrer" href="https://www.google.com/chrome/">
                Google Chrome
              </a>
              ,
              {' '}
              <a target="_blank" rel="noreferrer" href="https://www.mozilla.org/en-US/firefox/new/">Mozilla Firefox</a>
              {'  '}
              sau
              {' '}
              <a target="_blank" rel="noreferrer" href="https://www.microsoft.com/en-us/edge">Microsoft Edge</a>
              .
              {' '}
              Nu prea contează pe care din cele 3 îl instalezi, toate sunt bune.
            </p>
          </li>
          <li>
            <a target="_blank" rel="noreferrer" href="https://code.visualstudio.com/download">Visual Studio Code</a>
            : programul unde vom scrie efectiv codul.

            <p>
              {' '}
              Acest editor este
              extrem de popular printre developeri, așa că hai să-l folosim chiar de la
              început pentru a ne familiariza cu el.
              De asemenea, înainte să începi
              {' '}
              <a href="/html/despre-html">Lecția 1</a>
              {' '}
              te invităm să arunci un ochi pe acest
              {' '}
              <a href="/intro/vs-code">mini-tutorial despre VSCode</a>
              .
            </p>
          </li>
        </List>
      </section>
      <div className="dots" />
      <section>
        <LessonHeading as="h2" id={lessonInfo.chapters[7].id}>
          {lessonInfo.chapters[7].title}
        </LessonHeading>
        <p>
          Pe partea de resurse, vom adăuga la finalul fiecărei lecții link-uri de
          unde poți învăța mai multe. Totuși, nu putem să nu menționăm două site-uri extrem de
          utile și fără de care job-ul de FrontEnd developer ar fi mult mai frustrant:
        </p>
        <List as="ol" variant="count">
          <li>
            <a target="_blank" rel="noreferrer" href="https://developer.mozilla.org/en-US/" className="text-bold">MDN - Mozilla Developer Network</a>
            {' '}
            este locul unde găsim cele mai calitative și detaliate documentații despre HTML,
            CSS și JavaScript - cele 3 limbaje ce compun FrontEnd development-ul.
            <p>
              Domeniul e atât de complex încât e perfect normal să nu ținem minte totul.
              E mult mai comun decât ai crede ca developeri cu experiență să uite
              lucruri de sintaxă, adică ce bucată de cod trebuie să folosească pentru
              a ajunge la un anumit rezultat.
            </p>
            <p>
              De exemplu, poate am uitat cum schimbăm culoarea de fundal
              a unui element din pagină, caz în care vom căuta
              {' '}
              <FormattedText as="span">background color MDN</FormattedText>
              .
              Recomandăm să pui “MDN” la final pentru ca pagina căutată
              să apară printre primele rezultate.
            </p>
            <LessonFigure
              withBorder
              src="/images/lesson-0__google-search.png"
              alt="Cautând `background-color MDN` pe Google"
            />
            <p>
              And voilà! Am ajuns la documentație,
              unde putem vedea toate opțiunile posibile și cum le putem folosi:
            </p>
            <LessonFigure
              withBorder
              src="/images/lesson-0__mdn.png"
              alt="Documentația `background-color` pe MDN"
            />
          </li>
          <li>
            <a target="_blank" rel="noreferrer" href="https://stackoverflow.com/" className="text-bold">Stack Overflow</a>
            {' '}
            este o comunitate de developeri ce învață și codează împreună.
            <p>
              Mai exact, este cea mai populară platformă de întrebări și
              răspunsuri de programare, folosită de mai toți developerii din lume.
              Fără acest site ne-ar lua mult
              mai mult timp să gasim soluții la diversele
              buguri/probleme pe care le întâlnim când codăm.
            </p>
            <p>
              {' '}
              Iar dacă ești curios, poți arunca un ochi pe ultimele întrebări adăugate pentru
              limbajele ce le vom învăța aici:
              {' '}
              <a target="_blank" rel="noreferrer" href="https://stackoverflow.com/questions/tagged/html">HTML</a>
              ,
              {' '}
              <a target="_blank" rel="noreferrer" href="https://stackoverflow.com/questions/tagged/css">CSS</a>
              {' '}
              si
              {' '}
              <a target="_blank" rel="noreferrer" href="https://stackoverflow.com/questions/tagged/javascript">JavaScript</a>
              .
            </p>
          </li>
        </List>
      </section>
      {/* FIXME: uncomment this */}
      {/* <div className="text-center my-5">
          <a href="/" className="cta-button">
            Să continuăm cu prima lecție
            {' '}
            <br />
            {' '}
            despre HTML
          </a>
        </div> */}
    </>
  );
}
Example #21
Source File: RegisterEventCard.tsx    From frontend.ro with MIT License 4 votes vote down vote up
function RegisterEventCard({
  userInfo,
  id,
  title,
  cover,
  url,
  duration,
  description,
  location,
  eventDates,
  className,
}: ConnectedProps<typeof connector> & Props) {
  const [error, setError] = useState(null);
  const [isLoading, setIsLoading] = useState(false);
  const [urlToShare, setUrlToShare] = useState(url);

  const isPastEvent = eventDates.every(({ parts }) => {
    return parts[0].timestamp < Date.now();
  });

  useEffect(() => {
    // If we have the `url` prop then let's use that
    // as the share url. Otherwise default to the current page.
    if (url) {
      setUrlToShare(`${window.location.origin}${url}`);
    } else {
      setUrlToShare(`${window.location.origin}${window.location.pathname}`);
    }
  }, []);

  const onSubmit = async (formData: {
    name: string;
    email: string;
    tel: string;
    timestamp: number;
  }) => {
    setIsLoading(true);
    let shouldResetForm = true;

    if (!formData.timestamp) {
      formData.timestamp = formData.timestamp || eventDates[0].parts[0].timestamp;
    }

    try {
      const seatsInfo = await EventService.getSeatsInfo(id);

      if (seatsInfo.free > 0) {
        await EventService.register(id, formData);

        SweetAlertService.toast({
          type: 'success',
          text: 'Felicitări! Vei primi un email cu mai multe informații!',
        });
      } else {
        SweetAlertService.content(
          () => <WaitlistConfirmation id={id} userData={formData} />,
          'Listă de așteptare',
          {
            onSuccess() {
              SweetAlertService.closePopup();
            },
          },
        );
      }
    } catch (err) {
      shouldResetForm = false;
      setError(err.message || 'Nu am putut să te înregistrăm. Încearcă din nou!');
    } finally {
      setIsLoading(false);
    }
    return shouldResetForm;
  };

  return (
    <div className={`${styles['register-event-card']} ${className || ''} d-flex justify-content-between align-items-center`}>
      {cover && <img className={styles['cover--row']} src={cover} alt={`${title} cover`} />}
      <Form onSubmit={onSubmit} onInput={() => setError(null)}>
        {title && (
          <h2 className={styles.title}>
            {title}
          </h2>
        )}
        {cover && <img className={styles['cover--column']} src={cover} alt={`${title} cover`} />}
        <div className="d-flex justify-content-between flex-wrap">
          <div>
            <p className="m-0">
              Durată:
              {' '}
              <strong>
                {duration}
              </strong>
            </p>
            {eventDates.length === 1 && (
              <p className="m-0">
                Dată:
                {' '}
                {eventDates[0].parts.map((p, index) => (
                  <React.Fragment key={p.timestamp}>
                    <strong>
                      <time dateTime={format(p.timestamp, 'yyyy-MM-dd')}>{p.label}</time>
                    </strong>
                    {index < eventDates[0].parts.length - 1 && <>{' și '}</>}
                  </React.Fragment>
                ))}
              </p>
            )}

          </div>
          <div>
            <p className="m-0">
              Preț:
              {' '}
              <span className="text-blue text-bold">
                Gratuit
              </span>
            </p>
            <p className="m-0">
              Locație:
              {' '}
              <span className="text-blue text-bold">
                {location}
              </span>
            </p>
          </div>
        </div>
        <p className="my-5">{description}</p>
        {!isPastEvent && (
          <>
            <FormGroup className="mb-4">
              <label>
                <span className="label text-bold mb-2">
                  Nume si prenume
                </span>
                {userInfo && <input type="text" name="name" defaultValue={userInfo.name} required />}

              </label>
            </FormGroup>

            <FormGroup className="mb-4">
              <label>
                <span className="label text-bold mb-2">
                  Adresa de email
                </span>
                {userInfo && <input type="email" defaultValue={userInfo.email} name="email" required />}

              </label>
            </FormGroup>

            <FormGroup>
              <label>
                <span className="label text-bold mb-2">
                  Număr de telefon
                </span>
                <span className="text-xs text-grey d-flex align-items-center">
                  Te vom contacta cu o zi înainte de eveniment a confirma participarea
                </span>
                <input type="tel" name="tel" required />
              </label>
            </FormGroup>
          </>
        )}

        {eventDates.length > 1 && (
          <ReactSelect
            isSearchable
            placeholder="Alege data si ora la care vrei sa participi"
            className={styles.select}
            options={eventDates}
            name="timestamp"
          />
        )}

        {error && (
          <p className="text-red text-bold">
            {error}
          </p>
        )}
        {!isPastEvent && (
          <footer className="d-flex my-5 justify-content-between flex-wrap">
            <Button type="submit" variant="blue" loading={isLoading}>
              Înscrie-te
            </Button>
            <OptionsDrawer variant="light" trigger={{ text: 'Share', icon: faShare }}>
              <OptionsDrawer.Element>
                <CopyLinkButton text={urlToShare} />
              </OptionsDrawer.Element>
              <OptionsDrawer.Element>
                <FacebookButton url={urlToShare} />
              </OptionsDrawer.Element>
              <OptionsDrawer.Element>
                <LinkedInButton url={urlToShare} />
              </OptionsDrawer.Element>
              <OptionsDrawer.Element>
                <WhatsAppButton url={urlToShare} />
              </OptionsDrawer.Element>
            </OptionsDrawer>
          </footer>

        )}
        {url && (
          <div className="text-right my-5">
            <Link href={url}>
              <a>
                Află mai multe
              </a>
            </Link>
          </div>
        )}
      </Form>
    </div>
  );
}
Example #22
Source File: Diploma.tsx    From frontend.ro with MIT License 4 votes vote down vote up
Diploma = ({
  student, tutorial, certification, variant = 'large', shareControls = true,
}: Props) => {
  const [fullCertificationUrl, setFullCertificationUrl] = useState(certification.url);
  useEffect(() => {
    setFullCertificationUrl(`${window.location.origin}${certification.url}`);
  }, []);

  return (
    // If we ever change this attribute ID, make sure we also change
    // the `diploma-screenshot` Lambda Function
    // https://github.com/FrontEnd-ro/frontend.ro/issues/449
    <section data-diploma className={`${styles.Diploma} ${styles[`Diploma-${variant}`]} relative`}>
      <div className={`${styles.meta} absolute d-flex justify-content-between align-items-center mb-4`}>
        <a href="https://FrontEnd.ro">
          FrontEnd.ro
        </a>
        <time dateTime={format(certification.date.getTime(), 'yyyy-MM-dd')}>
          {formatDate(certification.date)}
        </time>
      </div>
      <div className={`${styles.main} text-center`}>
        <a
          href={`/${student.username}`}
          className={`${styles.student} no-underline inline-flex align-items-center text-left`}
        >
          <div className={`${styles['student-info']} mx-4`}>
            {student.name && (
              <p className="m-0 text-bold">{student.name}</p>
            )}
            <p className={`${styles.username} text-xs m-0 truncate`}>
              {`@${student.username}`}
            </p>
          </div>
          <img
            width="200"
            height="200"
            src={student.avatar}
            alt={`${student.name} avatar`}
          />
        </a>
        <p>
          a completat
          <a className="mt-4 mb-4 d-block text-bold" href={`/${tutorial.tutorialId}`}>
            {tutorial.name}
          </a>
          rezolvând cu succes toate cele
          {' '}
          {certification.exerciseCount}
          {' '}
          exerciții.
        </p>
      </div>
      <footer className="relative d-flex justify-content-between align-items-end">
        <Signature className="mr-2" />
        <QRCode
          width={140}
          background="#f8f8f8"
          className={styles.qrcode}
          url={fullCertificationUrl}
        />

        {shareControls && (
        // This attribute means we'll remove this element when generating
        // the OG:IMAGE and PDF for the Diploma
        // https://github.com/FrontEnd-ro/frontend.ro/issues/449
        <div data-diploma-hidden className={`${styles['share-button-wrapper']} absolute`}>
          <OptionsDrawer
            trigger={{
              text: 'Share',
              icon: faShare,
            }}
            direction="up"
          >
            <OptionsDrawer.Element>
              <CopyLinkButton text={fullCertificationUrl} />
            </OptionsDrawer.Element>
            {certification.pdf && (
            <OptionsDrawer.Element>
              <a
                href={certification.pdf}
                className="btn btn--light no-underline btn--with-icon"
              >
                <FontAwesomeIcon icon={faDownload} height="24" className="mr-2" />
                Download PDF
              </a>
            </OptionsDrawer.Element>
            )}
            <OptionsDrawer.Element>
              <FacebookButton url={fullCertificationUrl} />
            </OptionsDrawer.Element>
            <OptionsDrawer.Element>
              <LinkedInButton url={fullCertificationUrl} />
            </OptionsDrawer.Element>
          </OptionsDrawer>
        </div>
        )}
      </footer>
    </section>
  );
}