Skip to content

Примеры кода

Vanilla js

html
<adsgram-task data-block-id='task-7308' data-debug='true' class='task'>
  <p slot='reward' class='task__reward'>🪙 100</p>
  <div slot='button' class='task__button'>вперед</div>
  <div slot='done' class='task__button task__button_done'>готово</div>
</adsgram-task>
css
.task {
  --adsgram-task-font-size: 16px; /* минимум 14px */
  --adsgram-task-icon-size: 50px; /* минимум 30px */
  --adsgram-task-icon-title-gap: 15px; /* минимум 5px максимум 40px */
  --adsgram-task-button-width: 60px; /* минимум 40px */
  --adsgram-task-icon-border-radius: 8px;

  display: block;
  width: 328px;
  padding: 8px 16px 8px 8px;
  border-radius: 16px;
  background-color: #1d2733;
  font-family: Roboto;
  color: white;
}

.task__reward {
  margin: 5px 0 0 0;
  font-size: 14px;
}

.task__button {
  margin-left: 10px;
  background-color: #50a8eb;
  border-radius: 5px;
  padding: 6px 12px;
}

.task__button_done {
  margin-left: 0;
  background-color: #007539;
}
js
const task = document.querySelector(".task");
task.addEventListener("reward", (event) => {
  // в event.detail будет id вашего блока
  alert(`Награда в блоке ${event.detail}`);
});

task.addEventListener("onBannerNotFound", (event) => {
  alert(`Не найден баннер для блока ${event.detail}`);
});

React

Вставьте следующий скрипт в тег <head> вашего HTML.

Создайте React-компонент Task

jsx
import { useEffect, useRef } from "react";
import styles from "./task.module.css";

export const Task = ({ debug, blockId }) => {
  const taskRef = useRef(null);

  useEffect(() => {
    const handler = (event) => {
      // в event.detail будет id вашего блока
      alert(`Награда, detail = ${event.detail}`);
    };
    const task = taskRef.current;

    if (task) {
      task.addEventListener("reward", handler);
    }

    return () => {
      if (task) {
        task.removeEventListener("reward", handler);
      }
    };
  }, []);

  if (!customElements.get("adsgram-task")) {
    return null;
  }

  return (
    <adsgram-task
      className={styles.task}
      data-block-id={blockId}
      data-debug={debug}
      ref={taskRef}
    >
      <span slot="reward" className={styles.reward}>
        1000 монет
      </span>
      <div slot="button" className={styles.button}>
        вперед
      </div>
      <div slot="done" className={styles.button_done}>
        готово
      </div>
    </adsgram-task>
  );
};
tsx
import { useEffect, useRef } from "react";
import styles from "./task.module.css";
import { JSX } from "react/jsx-runtime";

/**
  * Проверьте раздел Typescript
  * и добавте типы для типизации <adsgram-task>
*/

interface TaskProps {
  debug: boolean;
  blockId: string;
}

export const Task = ({ debug, blockId }: TaskProps) => {
  const taskRef = useRef<JSX.IntrinsicElements["adsgram-task"]>(null);

  useEffect(() => {
    const handler = (event: CustomEvent) => {
      // в event.detail будет id вашего блока
      alert(`Награда detail = ${event.detail}`);
    };
    const task = taskRef.current;

    if (task) {
      task.addEventListener("reward", handler);
    }

    return () => {
      if (task) {
        task.removeEventListener("reward", handler);
      }
    };
  }, []);

  if (!customElements.get("adsgram-task")) {
    return null;
  }

  return (
    <adsgram-task
      className={styles.task}
      data-block-id={blockId}
      data-debug={debug}
      ref={taskRef}
    >
      <span slot="reward" className={styles.reward}>
        1000 монет
      </span>
      <div slot="button" className={styles.button}>
        вперед
      </div>
      <div slot="done" className={styles.button_done}>
        готово
      </div>
    </adsgram-task>
  );
};