Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import React, { Component } from "react";
- import "../Styles/OurServices.css";
- import Logo from "./Logo";
- import Arrow from "../media/arrow-bottom.png";
- import Socials from "../Components/Socials";
- import * as d3 from "d3";
- import { Link } from "react-router-dom";
- import MobileNav from "./MobileNav";
- import Exit from "../media/mobile_exit.png";
- import Minus from "../media/minus.svg";
- import Plus from "../media/plus.svg";
- import anime from 'animejs/lib/anime.es';
- import { timingSafeEqual } from "crypto";
- import {animationData} from '../properties/Paths'
- import { func } from "prop-types";
- import { isIP } from "net";
- export default class extends Component {
- constructor(props) {
- super(props);
- this.state = {
- visibility: window.innerWidth >= 768 ? true : false,
- resizing: false,
- page_preview: true,
- page_price: false,
- priceList: true,
- page_stages: false,
- page_release: false,
- page_final: false,
- mob_PriceList: false,
- mob_digital_list: true,
- mob_branding_list: false,
- details: false,
- services: null, // list of all available services
- selected_service: null, // service selected by a client
- priceList_anim: false,
- isFirstOpen: true,
- isAnimate: false
- };
- }
- setPage(name){
- if(!this.state.isAnimate){
- this.setState({
- page_preview: false,
- page_price: false,
- page_stages: false,
- page_release: false,
- page_final: false,
- }, ()=>{
- switch (name){
- case 'preview':
- this.setState({page_preview : true}, ()=>{
- this.changeVideo(animationData.step0);
- });
- break;
- case 'price':
- this.setState({page_price : true}, ()=>{
- this.changeVideo(animationData.step1);
- });
- break;
- case 'stages':
- this.setState({page_stages : true}, ()=>{
- this.changeVideo(animationData.step2);
- });
- break;
- case 'release':
- this.setState({page_release : true}, ()=>{
- this.changeVideo(animationData.step3);
- });
- break;
- case 'final':
- this.setState({page_final : true}, ()=>{
- this.changeVideo(false);
- });
- }
- });
- }
- }
- componentDidMount() {
- fetch('/api/service')
- .then(res => res.json())
- .then(services => this.setState({ services }, () => console.log(this.state.services)));
- this.addScroll();
- this.preSets();
- this.priceHide();
- this.hideDevStep();
- this.releaseStepHide();
- this.lastStepHide();
- }
- preSets(){
- let that = this;
- d3.select('.d_our_services_price_triangle').style('border-width', '0vw 0vw 0vw 0vw' );
- d3.select('.d_our_services_price_list').style('width', '0vw').style('height', '0vw');
- d3.select('.d_our_service_price_name').style('opacity', 0);
- d3.select('.d_price_button_plus').style('opacity', '1');
- d3.select('.d_price_button').style('width', '25vw');
- d3.select('.d_price_button_minus').style('opacity', 0);
- d3.select('.d_first_container').style('left', '-50vw');
- d3.select('.d_second_container').style('right', '-50vw');
- d3.select('.d_our_services_last_step_left_block').style('left', '-100vw');
- d3.select('.d_our_services_last_step_right_block').style('left', '100vw');
- d3.select('.d_our_services_last_step_svg_main').style('transform', `scale(0)`);
- d3.select('.d_our_services_last_step_header').style('top', '-50vw');
- d3.select('.d_our_services_last_step_bottom_nav').style('bottom', '-50vw');
- d3.select('.d_our_services_release_step_head').style('top', '-50vw');
- d3.selectAll('.d_our_services_dev_step_bottom_nav_cont').style('bottom', '-50vw');
- d3.select('.d_our_services_dev_step h1').style('top', '-50vw');
- d3.select('.d_our_services_price_cont h1').style('top', '-50vw');
- d3.select('.d_our_services_price_cont .d_price_bottom_container').style('bottom', '-50vw');
- d3.select('.d_our_services_preview_cont h1').style('top', '-50vw');
- d3.select('.d_our_services_bottom_block').style('bottom', '-50vw');
- this.animationPrice(true);
- this.animationStages(true);
- this.animationRelease(true);
- d3.select('.test_path').style('transform', 'scale(0)').style('transform-origin', '27% 27%');
- this.animationOpen(animationData.step0, 4);
- this.priceListHide();
- }
- addScroll = () => {
- if (window.innerWidth <= 768) {
- document
- .querySelector(".m_our_services")
- .addEventListener("scroll", this.scrollEvent);
- }
- };
- animationOpen(paths, duration){
- let that = this;
- if(paths){
- this.setAnimationPaths(paths, duration);
- d3.select('.test_path')
- .transition().duration(duration*1000/2).ease(d3.easeLinear)
- .style('transform', 'scale(0.8)')
- .style('transform-origin', '0% 0%')
- .on('end', function(){
- that.setState({isAnimate: false});
- });
- }else{
- that.setState({isAnimate: false});
- }
- if(that.state.page_preview){
- this.animationPreview(true);
- this.priceListHide();
- }else if(that.state.page_price){
- this.animationPrice(true);
- }else if(that.state.page_stages){
- this.priceListHide();
- this.animationStages(true);
- }else if(that.state.page_release){
- this.animationRelease(true);
- }else if(that.state.page_final){
- this.animationFinal(true);
- }
- }
- animationFinal(isOpen){
- d3.select('.d_our_services_last_step_left_block')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', `${isOpen ? 3 : -100}vw`);
- d3.select('.d_our_services_last_step_right_block')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', `${isOpen ? 0 : 100}vw`);
- d3.select('.d_our_services_last_step_svg_main')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('transform', `scale(${isOpen ? 1 : 0})`);
- d3.select('.d_our_services_last_step_header')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('top', `${isOpen ? 0 : -50}vw`);
- d3.select('.d_our_services_last_step_bottom_nav')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('bottom', `${isOpen ? 1 : -50}vw`);
- }
- animationRelease(isOpen){
- d3.select('.d_our_services_release_step_head')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('top', `${isOpen ? 0 : -50}vw`);
- d3.select('.d_our_services_release_step .d_our_services_dev_step_bottom_nav_cont')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('bottom', `${isOpen ? 1 : -50}vw`);
- if(!isOpen){
- d3.selectAll('.d_our_services_release_step_left_text, .d_our_services_release_step_left_svg, .d_our_services_release_step_bottom_text')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', '-100vw');
- d3.select('.d_our_services_release_step_left_window')
- .transition().duration(2000).ease(d3.easeLinear)
- .style('left', '-100vw');
- d3.select('.d_our_services_release_step_right_window')
- .transition().duration(2000).ease(d3.easeLinear)
- .style('left', '200vw');
- d3.select('.d_our_services_release_step_right_text')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', '200vw');
- }else{
- d3.select('.d_our_services_release_step_left_text')
- .style('left', '-29vw');
- d3.select('.d_our_services_release_step_left_window')
- .style('left', '5vw');
- d3.select('.d_our_services_release_step_left_svg')
- .style('left', '0vw');
- d3.select('.d_our_services_release_step_bottom_text')
- .style('left', '-29vw');
- d3.select('.d_our_services_release_step_right_window')
- .style('left', '72vw');
- d3.select('.d_our_services_release_step_right_text')
- .style('left', '81vw');
- }
- }
- animationStages(isOpen){
- d3.select('.d_our_services_dev_step h1')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('top', `${isOpen ? 0 : -50}vw`);
- d3.select('.d_our_services_dev_step .d_our_services_dev_step_bottom_nav_cont')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('bottom', `${isOpen ? 1 : -50}vw`);
- if(!isOpen){
- d3.selectAll('.d_our_services_dev_step_left_count_window, .d_our_services_dev_step_right_count_window')
- .transition().duration(2000).ease(d3.easeLinear)
- .style('left', '-100vw');
- d3.selectAll('.d_our_services_dev_step_left_text, .d_our_services_dev_step_bottom_text')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', '-100vw');
- d3.select('.d_our_services_dev_step_bottom_count_window')
- .transition().duration(2000).ease(d3.easeLinear)
- .style('left', '200vw');
- d3.selectAll('.d_our_services_dev_step_list, .d_our_services_dev_step_right_text, .d_our_services_dev_step_right_svg')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', '200vw');
- }else{
- d3.select('.d_our_services_dev_step_left_count_window')
- .style('left', '5vw');
- d3.select('.d_our_services_dev_step_left_text')
- .style('left', '-18vw');
- d3.select('.d_our_services_dev_step_bottom_text')
- .style('left', '-30vw');
- d3.select('.d_our_services_dev_step_right_count_window')
- .style('left', '5vw');
- d3.select('.d_our_services_dev_step_bottom_count_window')
- .style('left', '73vw');
- d3.select('.d_our_services_dev_step_right_text')
- .style('left', '81vw');
- d3.select('.d_our_services_dev_step_right_svg')
- .style('left', '72vw');
- d3.select('.d_our_services_dev_step_list')
- .style('left', '80vw');
- }
- }
- animationPrice(isOpen){
- if(!this.state.isFirstOpen){
- d3.select('.d_our_services_price_cont h1')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('top', `${isOpen ? 0 : -50}vw`);
- d3.select('.d_our_services_price_cont .d_price_bottom_container')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('bottom', `${isOpen ? 1 : -50}vw`);
- }
- if(!isOpen){
- d3.selectAll('.left_count_window, .bottom_count_window')
- .transition().duration(2000).ease(d3.easeLinear)
- .style('left', '-100vw');
- d3.selectAll('.left_count_text, .bottom_count_text')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', '-100vw');
- d3.select('.right_count_window')
- .transition().duration(2000).ease(d3.easeLinear)
- .style('left', '200vw');
- d3.select('.right_count_text')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', '200vw');
- }else{
- d3.selectAll('.left_count_window, .bottom_count_window')
- .style('left', '10vw');
- d3.select('.left_count_text')
- .style('left', '-20vw');
- d3.select('.bottom_count_text')
- .style('left', '-25vw');
- d3.select('.right_count_text')
- .style('left', '116.5vw');
- d3.select('.right_count_window')
- .style('left', '73vw');
- }
- }
- animationPreview(isOpen){
- d3.select('.d_our_services_preview_cont h1')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('top', `${isOpen ? 0 : -50}vw`);
- d3.select('.d_our_services_bottom_block')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('bottom', `${isOpen ? 1 : -50}vw`);
- d3.select('.d_first_container')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('left', `${isOpen ? 0 : -50}vw`);
- d3.select('.d_second_container')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('right', `${isOpen ? 0 : -50}vw`);
- }
- animationClose(paths, duration){
- let that = this;
- if(that.state.page_preview){
- this.animationPrice(false);
- }else if(that.state.page_price){
- this.animationPreview(false);
- this.animationStages(false);
- }else if(that.state.page_stages){
- this.animationPrice(false);
- this.animationRelease(false);
- }else if(that.state.page_release){
- this.animationStages(false);
- this.animationFinal(false);
- }else if(that.state.page_final){
- this.animationRelease(false);
- }
- d3.select('.test_path')
- .transition().duration(1500).ease(d3.easeLinear)
- .style('transform', 'scale(0)')
- .style('transform-origin', '27% 27%')
- .on('end', function(){
- if(that.state.page_preview){
- that.appendVideo(animationData.videos[0]);
- }else if(that.state.page_price){
- that.appendVideo(animationData.videos[1]);
- }else if(that.state.page_stages){
- that.appendVideo(animationData.videos[2]);
- }else if(that.state.page_release){
- that.appendVideo(animationData.videos[3]);
- }
- that.animationOpen(paths, duration);
- })
- }
- appendVideo(video){
- let video_node = d3.select('.animation_video').node();
- if(!video_node.paused){
- video_node.pause();
- }
- d3.select('.animation_video').node().remove();
- d3.select('.d_our_services_main_animation_box')
- .append('video')
- .classed('animation_video', true)
- .attr('width', '1920')
- .attr('height', '1080')
- .attr('autoplay', 'autoplay')
- .attr('muted', 'muted')
- .attr('preload', 'auto')
- .attr('loop', 'loop')
- .append('source')
- .classed('anim_source', true)
- .attr('src', video)
- .attr('type', 'video/mp4');
- }
- setAnimationPaths(paths, duration){
- d3.select('.test_path').append('animate')
- .attr('repeatCount', 'indefinite')
- .attr('fill', 'freeze')
- .attr('attributeName', 'd')
- .attr('dur', `${duration}s`)
- .attr('values', paths)
- .on('end', function(){
- if (d3.select('.test_path').select('animate').node())
- d3.select('.test_path').select('animate').node().remove();
- })
- }
- changeVideo(step){
- this.setState({isAnimate: true}, ()=>{
- this.animationClose(step, 4);
- if(!this.state.priceList){
- this.priceListHide()
- }
- });
- }
- goBack = () => {
- this.props.history.goBack();
- };
- changePriceList = () => {
- if(!this.state.priceList_anim){
- let priceList = this.state.priceList;
- this.setState({ priceList: !priceList,
- priceList_anim: true});
- this.state.priceList ? this.priceListShow() : this.priceListHide();
- }
- };
- toPrice = () => {
- this.setPage('price');
- };
- priceToPrev = () => {
- this.setPage('preview');
- };
- toDevStep = () => {
- if (this.state.selected_service) {
- this.setPage('stages');
- } else {
- if(this.state.priceList){
- d3.select('.d_price_button').classed('d_price_button_light_animation', true);
- }
- }
- };
- devStepToPrev = () => {
- this.setPage('price');
- };
- toLastStep = () => {
- this.setPage('final');
- };
- releaseStepToPrev = () => {
- this.setPage('stages');
- };
- goToRelease = () => {
- this.setPage('release');
- };
- toggleMobilePriceList = () => {
- let mobPriceList = this.state.mob_PriceList;
- this.setState({ mob_PriceList: !mobPriceList });
- !mobPriceList ? this.showMobilePriceList() : this.hideMobilePriceList();
- };
- showDigitalList = () => {
- this.setState({
- mob_digital_list: true,
- mob_branding_list: false
- });
- };
- showBrandingList = () => {
- this.setState({
- mob_digital_list: false,
- mob_branding_list: true
- });
- };
- toDetails = () => {
- this.setState({
- mob_PriceList: false,
- details: true
- });
- };
- addAnimation(elem, animName) {
- d3.selectAll(elem).style("animation-name", animName);
- }
- changeDisplay(elem, display) {
- if(this.state.isFirstOpen){
- this.setState({isFirstOpen: false});
- d3.select(elem).style("display", display);
- }else{
- d3.timeout(function(){
- d3.select(elem).style("display", display);
- }, 2000);
- }
- }
- animatePrice() {
- // this.addShadows();
- // setTimeout(this.closeShadows, 4000);
- }
- showPreview() {
- this.changeDisplay(".d_our_services_preview_cont", "block");
- }
- priceHide() {
- this.changeDisplay(".d_our_services_price_cont", "none");
- }
- priceShow() {
- // this.animatePrice();
- this.changeDisplay(".d_our_services_price_cont", "block");
- }
- previewHide() {
- this.changeDisplay(".d_our_services_preview_cont", "none");
- }
- priceListShow() {
- this.changePriceButtonSize(false);
- this.changeTextPriceButton(false);
- this.changePlusPriceButton(false, -10);
- this.changeBottomPriceTextVisibility(false);
- this.showHidePriceList(3, 36, 32, 1, 1000, true);
- d3.select('.d_price_button').classed('d_price_button_light_animation', false);
- this.setState({priceList: false});
- }
- priceListHide() {
- this.changePriceButtonSize(true);
- this.changeTextPriceButton(true);
- this.changePlusPriceButton(true, 0);
- this.changeBottomPriceTextVisibility(true);
- this.showHidePriceList(0, 0, 0, 0, 100, false);
- this.setState({priceList: true});
- }
- changePriceButtonSize(isShow){
- d3.select('.d_price_button')
- .transition().duration(500).ease(d3.easeLinear)
- .style('width', `${isShow ? 25 : 2.3}vw`)
- }
- changeTextPriceButton(isShow){
- d3.select('.d_price_button p')
- .transition().duration(300).ease(d3.easeLinear)
- .on('start', function(){
- d3.select(this)
- .style('display', 'block');
- })
- .style('max-width', `${isShow ? 25 : 0}vw`)
- .style('opacity', isShow ? 1 : 0)
- .on('end', function(){
- if(!isShow){
- d3.select(this)
- .style('display', 'none');
- }
- });
- }
- changePlusPriceButton(isShow, left){
- d3.select('.d_price_button_plus')
- .transition().duration(500).ease(d3.easeLinear)
- .on('start', function(){
- d3.select(this)
- .style('display', 'block');
- })
- .style('left', `${left}vw`)
- .style('opacity', `${isShow ? 1 : 0}`)
- .on('end', function(){
- if(!isShow){
- d3.select(this)
- .style('display', 'none');
- }
- });
- if(isShow){
- d3.select('.d_price_button_minus')
- .transition().duration(200).ease(d3.easeLinear)
- .style('opacity', 0);
- }
- d3.select('.d_price_button')
- .transition().duration(500).ease(d3.easeLinear)
- .style('width', `${isShow ? 25 : 2.3}vw`)
- .on('end', function(){
- if(!isShow){
- d3.select('.d_price_button_minus')
- .transition().duration(500).ease(d3.easeLinear)
- .style('opacity', 1)
- }
- });
- }
- changeBottomPriceTextVisibility(isShow){
- d3.select('.d_price_bottom_header')
- .transition().duration(300).ease(d3.easeLinear)
- .on('start', function(){
- d3.select(this)
- .style('display', 'block');
- })
- .style('line-height', `${isShow ? 3 : 0}vw`)
- .style('margin-top', `${isShow ? 1 : 0}em`)
- .style('margin-top', `${isShow ? 1 : 0}em`)
- .style('opacity', isShow ? 1 : 0)
- .on('end', function(){
- if(!isShow){
- d3.select(this)
- .style('display', 'none');
- }
- });
- }
- showHidePriceList(border_width, width, height, opacity, time, display) {
- let that = this;
- if(!this.state.priceList_anim){
- if(display) d3.select('.d_our_services_price_list').style("display", 'flex');
- d3.select('.d_our_services_price_triangle')
- .transition().duration(500).ease(d3.easeLinear)
- .style('border-right-width', `${border_width}vw`)
- .style('border-left-width', `${border_width}vw`)
- .style('border-bottom-width', '0vw')
- .style('border-top-width', `${border_width}vw`);
- d3.timeout(function(){
- d3.select('.d_our_services_price_list')
- .transition().duration(500).ease(d3.easeLinear)
- .style('height', `${height}vw`)
- .style('width', `${width}vw`)
- .on('end', function(){
- d3.selectAll('.d_our_service_price_name')
- .transition().duration(500).ease(d3.easeLinear)
- .style('opacity', opacity)
- .on('end', function(){
- if(!display) {d3.select('.d_our_services_price_list').style("display", 'none')};
- that.setState({priceList_anim: false});
- });
- });
- }, 100);
- }
- }
- showDevStep = () => {
- this.changeDisplay(".d_our_services_dev_step", "block");
- };
- hideDevStep = () => {
- this.changeDisplay(".d_our_services_dev_step", "none");
- };
- releseStepShow = () => {
- // this.animatePrice();
- this.changeDisplay(".d_our_services_release_step", "block");
- };
- releaseStepHide = () => {
- this.changeDisplay(".d_our_services_release_step", "none");
- };
- lastStepShow = () => {
- this.changeDisplay(".d_our_services_last_step", "block");
- };
- lastStepHide = () => {
- this.changeDisplay(".d_our_services_last_step", "none");
- };
- showMobilePriceList = () => {
- this.changeDisplay(".m_our_services_button span", "none");
- this.changeDisplay(".m_our_services_cost_after_head", "none");
- d3.select(".m_our_services_button").classed("active", true);
- this.changeDisplay(".m_our_services_price_list", "block");
- if (this.state.details) {
- d3.select(".m_our_services_another_services").classed("disabled", true);
- d3.select(".m_our_services_button").classed("disabled", true);
- }
- };
- hideMobilePriceList = () => {
- if (!this.state.details) {
- setTimeout(() => {
- this.changeDisplay(".m_our_services_button span", "block");
- }, 300);
- }
- this.changeDisplay(".m_our_services_cost_after_head", "block");
- d3.select(".m_our_services_button").classed("active", false);
- this.changeDisplay(".m_our_services_price_list", "none");
- if (this.state.details) {
- setTimeout(() => {
- d3.select(".m_our_services_another_services").classed(
- "disabled",
- false
- );
- }, 300);
- this.changeDisplay(".m_our_services_button span:first-of-type", "none");
- d3.select(".m_our_services_button").classed("disabled", false);
- }
- };
- showMobileBrandingList = () => {
- d3.select(".m_our_services_branding_button").classed("active", true);
- this.changeDisplay(".m_our_services_branding_list", "block");
- };
- hideMobileBrandingList = () => {
- d3.select(".m_our_services_branding_button").classed("active", false);
- this.changeDisplay(".m_our_services_branding_list", "none");
- };
- showMobileDigitalList = () => {
- d3.select(".m_our_services_digital_button").classed("active", true);
- this.changeDisplay(".m_our_services_digital_list", "block");
- };
- hideMobileDigitalList = () => {
- d3.select(".m_our_services_digital_button").classed("active", false);
- this.changeDisplay(".m_our_services_digital_list", "none");
- };
- scrollEvent = () => {
- let scrollElem = d3.select(".m_our_services");
- let scrollTop = scrollElem.node().scrollTop;
- let selectElem = parseInt(scrollTop / 550 + 1);
- this.changeScrollElem(selectElem);
- };
- changeScrollElem = selectElem => {
- let activeElem = d3
- .selectAll(".m_our_services_anchors div")
- .filter(".active");
- activeElem.classed("active", false);
- d3.select(`.m_our_services_anchors div:nth-child(${selectElem})`).classed(
- "active",
- true
- );
- };
- scrollTo = (to = 0, duration = 1000) => {
- const start = document.querySelector(".m_our_services").scrollTop;
- const change = to - start;
- const increment = 20;
- let currentTime = 0;
- const animateScroll = () => {
- currentTime += increment;
- const val = this.easeInOutQuad(currentTime, start, change, duration);
- document.querySelector(".m_our_services").scrollTop = val;
- if (currentTime < duration) {
- setTimeout(animateScroll, increment);
- }
- };
- animateScroll();
- };
- easeInOutQuad = (t, b, c, d) => {
- t /= d / 2;
- if (t < 1) return (c / 2) * t * t + b;
- t--;
- return (-c / 2) * (t * (t - 2) - 1) + b;
- };
- showDetails = () => {
- this.changeDisplay(".m_our_services_details", "block");
- this.changeDisplay(".m_our_services_list_services", "none");
- this.changeDisplay(".m_our_services_another_services", "inline");
- d3.select(".m_our_services_button").style("width", "60vw");
- };
- getServiceById = id => {
- for(let service of this.state.services) {
- if(service._id === id) {
- return service;
- }
- }
- return null;
- }
- getServiceByTitle = title => {
- for(let service of this.state.services) {
- if(service.title === title) {
- return service;
- }
- }
- return null;
- }
- getSubServicesOf = headService => {
- if (!headService || !headService.child || headService.child === [])
- return null;
- let result = [];
- for (let subServiceId of headService.child) {
- let tempSubService = this.getServiceById(subServiceId);
- if (
- tempSubService &&
- tempSubService.executors &&
- tempSubService.executors.length > 0
- // tempSubService.price
- ) {
- result.push(tempSubService);
- let tmpChildren = this.getSubServicesOf(tempSubService);
- if (tmpChildren) {
- for (let child of tmpChildren)
- if (child && child.executors && child.executors.length > 0)
- result.push(child);
- }
- }
- }
- return result;
- }
- handleServiceClick = event => {
- let serviceTitle = event.target.textContent;
- this.setState({
- selected_service: this.getServiceByTitle(serviceTitle)
- }, () => this.toDevStep());
- }
- handleMobileServiceClick = event => {
- let serviceTitle = event.target.textContent;
- this.setState({
- selected_service: this.getServiceByTitle(serviceTitle)
- });
- this.toDetails();
- }
- render() {
- let that = this;
- let {
- page_preview,
- page_price,
- priceList,
- page_stages,
- page_release,
- page_final,
- mob_digital_list,
- mob_branding_list,
- mob_PriceList,
- details,
- priceList_anim,
- isAnimate
- } = this.state;
- if(!isAnimate){
- page_preview
- ? this.showPreview()
- : this.previewHide();
- page_price
- ? this.priceShow()
- : this.priceHide();
- page_stages
- ? this.showDevStep()
- : this.hideDevStep();
- page_release
- ? this.releseStepShow()
- : this.releaseStepHide();
- page_final
- ? this.lastStepShow()
- : this.lastStepHide();
- }
- mob_branding_list
- ? this.showMobileBrandingList()
- : this.hideMobileBrandingList();
- mob_digital_list
- ? this.showMobileDigitalList()
- : this.hideMobileDigitalList();
- mob_PriceList
- ? this.showMobilePriceList()
- : this.hideMobilePriceList();
- if (details) this.showDetails();
- window.onresize = function() {
- let set_visibility = Object.assign(
- {},
- { visibility: that.state.visibility }
- );
- that.setState({ visibility: window.innerWidth >= 768 ? true : false });
- if (set_visibility.visibility != that.state.visibility) {
- that.render();
- }
- };
- return (
- <div>
- {this.state.visibility ? (
- <div className="d_our_services">
- <Logo />
- <div className='d_our_services_main_animation_box'>
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920px" height="1080px" preserveAspectRatio="xMidYMid slice">
- <defs>
- <mask id="mask" x="0" y="0" width="1920" height="1080" >
- <rect width="100%" height="100%"/>
- <g transform="translate(520 220)">
- <path className='test_path' fill="red">
- </path>
- </g>
- </mask>
- </defs>
- <rect x="0" y="0" width="1920" height="1080"/>
- </svg>
- <video className='animation_video' width="1920" height="1080" autoplay="autoplay" muted="muted" preload="auto" loop="loop">
- <source className="anim_source" src={animationData.videos[0]} type="video/mp4" />
- {/* <source className="anim_source" src={Paths.videos[0]} type="video/webm" /> */}
- </video>
- </div>
- <div className="d_our_services_preview_cont">
- <h1>Як це працює?</h1>
- <div className="our_services_top_container">
- <div className="d_first_container">
- <div className="our_services_first_text">
- <span>Реалізація всіх робіт у</span>
- <strong>3</strong>
- <span>кроки.</span>
- </div>
- <div className="our_services_second_text">
- <p>
- Ми не будемо розповідати Вам
- <br /> про якість роботи, суворе дотримання дедлайнів чи{" "}
- <br /> виконання всіх вимог замовника.
- <br />
- У нашому розумінні це зовсім не
- <br /> переваги, це – норма (аксіома) <br />
- надання послуги.
- </p>
- </div>
- <div className="our_services_third_text">
- <p>
- Виконання Вашого замовлення <br />
- відбувається за чіткою <br />
- відпрацьованою схемою, без збоїв <br />
- та затримок.
- </p>
- </div>
- </div>
- <div className="d_second_container">
- <h4>Нашими беззаперечними</h4>
- <h5>плюсами є:</h5>
- <ul>
- <li>
- <div />
- Прозорість. Ми максимально спрощуємо презентацію роботи,
- щоб клієнт міг все зрозуміти і впевнитись у її виконанні.
- </li>
- <li>
- <div />
- Широкий спектр супутніх послуг для максимальної зручності
- процесу розвитку бізнесу (сайту).
- </li>
- <li>
- <div />
- Контроль виконання роботи. Ми звітуємо за результатами
- кожного етапу розробки щоб у Вас не виникло жодних
- сумнівів.
- </li>
- <li>
- <div />
- Підтримка постійного зв’язку із замовником для оптимізації
- виробничого процесу.
- </li>
- </ul>
- </div>
- </div>
- <div className="d_our_services_bottom_block">
- <h2>Як ми працюємо та скільки це коштує?</h2>
- <button className='d_our_services_change_page_button' onClick={this.toPrice}>Ознайомитись</button>
- <p>Відео про нас</p>
- <img src={Arrow} />
- </div>
- </div>
- <div className="d_our_services_price_cont">
- <h1>Установчий етап</h1>
- {/* <div className="d_our_services_price_list">
- <div className="d_our_services_price_triangle" />
- <div className="d_our_services_price_digital">
- <h3>Digital studio</h3>
- <div className="d_our_services_price_digital_list">
- {
- this.state &&
- this.state.services &&
- this.getSubServicesOf(this.state.services[1])
- .map(service => <p onClick={this.handleServiceClick}>{service.title}</p>)
- }
- </div>
- </div>
- <div className="d_our_services_price_branding">
- <h3>Branding studio</h3>
- <div className="d_our_services_price_branding_list">
- {
- this.state &&
- this.state.services &&
- this.getSubServicesOf(this.state.services[0])
- .map(service => <p onClick={this.handleServiceClick}>{service.title}</p>)
- }
- </div>
- </div>
- </div> */}
- <div className="left_count_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <div className="count_parrent">
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- </div>
- </div>
- <div className="right_count_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <div className="right_count_parrent">
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- <span>2</span>
- </div>
- </div>
- <div className="bottom_count_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <div className="bottom_count_parrent">
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- </div>
- </div>
- <div className="left_count_text">
- <strong>Обговорення</strong>
- <span>
- всіх вимог, планів, ідей та пропозицій для максимального
- взаєморозуміння.
- </span>
- </div>
- <div className="right_count_text">
- <strong>Формування прайсу </strong>
- <span>на основі погодження позицій обох сторін.</span>
- </div>
- <div className="bottom_count_text">
- <strong>Підписання договору -</strong>
- <br />
- <span>старт плідної співпраці.</span>
- </div>
- <div className="d_price_bottom_container">
- <div className="d_our_services_price_list">
- <div className="d_our_services_price_digital">
- <h3>Digital studio</h3>
- <div className="d_our_services_price_digital_list">
- {
- this.state &&
- this.state.services &&
- this.getSubServicesOf(this.state.services[1])
- .map(service => <p className='d_our_service_price_name' onClick={this.handleServiceClick}>{service.title}</p>)
- }
- </div>
- </div>
- <div className="d_our_services_price_branding">
- <h3>Branding studio</h3>
- <div className="d_our_services_price_branding_list">
- {
- this.state &&
- this.state.services &&
- this.getSubServicesOf(this.state.services[0])
- .map(service => <p className='d_our_service_price_name' onClick={this.handleServiceClick}>{service.title}</p>)
- }
- </div>
- </div>
- </div>
- <div className="d_our_services_price_triangle" />
- <h3 className="d_price_bottom_header">
- Оберіть послугу, яка вас цікавить.
- </h3>
- <button
- className="d_price_button"
- onClick={this.changePriceList}
- >
- <img className='d_price_button_plus' src={Plus} />
- <p>Перелік послуг</p>
- <img className='d_price_button_minus' src={Minus} />
- </button>
- <div className="d_price_nav_button_container">
- <button
- className="d_our_services_price_to_prev d_our_services_change_page_button"
- onClick={this.priceToPrev}
- >
- {" "}
- {"<<Повернутись"}
- </button>
- <button
- className="d_our_services_price_to_next d_our_services_change_page_button"
- onClick={this.toDevStep}
- >
- {" "}
- {"Наступний крок>>"}{" "}
- </button>
- </div>
- </div>
- </div>
- <div className="d_our_services_dev_step">
- <h1>Этап розробки</h1>
- <div className="d_our_services_dev_step_left_count_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- </div>
- <div className="d_our_services_dev_step_left_text">
- <strong>Узгодження фінального ТЗ</strong>
- <br />
- <span>окреслення Вашого майбутнього проекту.</span>
- </div>
- <div className="d_our_services_dev_step_right_count_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- <span>2</span>
- </div>
- <div className="d_our_services_dev_step_bottom_count_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- </div>
- <div className="d_our_services_dev_step_bottom_text">
- <strong>30% передплати</strong>
- <br />
- <span>куди ж без цього.</span>
- </div>
- <div className="d_our_services_dev_step_right_text">
- <strong>
- Безпосередній <br /> процес розробки
- </strong>
- <br />
- <span>
- який передбачає <br /> реалізацію всіх Ваших побажань...
- </span>
- </div>
- <svg
- className="d_our_services_dev_step_right_svg"
- viewBox="0 0 180 180"
- >
- <circle fill="white" cx="8" cy="2" r="1.3" />
- <line
- x1="8"
- y1="2"
- x2="11.5"
- y2="13"
- stroke="white"
- strokeWidth="0.2"
- />
- <line
- x1="11.5"
- y1="13"
- x2="43"
- y2="13"
- stroke="white"
- strokeWidth="0.2"
- />
- </svg>
- <ul className="d_our_services_dev_step_list">
- <li>
- <div />Допускається внесення правок 3 рази.
- </li>
- <li>
- <div />Повний контроль за процесом розробки через наш
- клієнтський додаток.
- </li>
- </ul>
- <div className="d_our_services_dev_step_bottom_nav_cont">
- <h3>Що відбувається в фіналі?</h3>
- <button className='d_our_services_change_page_button' onClick={this.goToRelease}>Останній крок</button>
- <div className="d_our_services_dev_step_bottom_buttons">
- <button className='d_our_services_change_page_button' onClick={this.devStepToPrev}>
- {"<<Повернутись"}
- </button>
- <button className='d_our_services_change_page_button' onClick={this.goToRelease}>
- {"Наступний крок>>"}
- </button>
- </div>
- </div>
- </div>
- <div className="d_our_services_release_step">
- <h1 className="d_our_services_release_step_head">
- Реліз та обслуговування
- </h1>
- <div className="d_our_services_release_step_left_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- </div>
- <div className="d_our_services_release_step_left_text">
- Ви отримуєте <br />
- готовий продукт
- </div>
- <svg
- className="d_our_services_release_step_left_svg"
- viewBox="0 0 180 180"
- >
- <circle fill="white" cx="13" cy="2" r="1.3" />
- <line
- x1="13"
- y1="2"
- x2="16.5"
- y2="13"
- stroke="white"
- strokeWidth="0.2"
- />
- <line
- x1="16.5"
- y1="13"
- x2="52"
- y2="13"
- stroke="white"
- strokeWidth="0.2"
- />
- </svg>
- <div className="d_our_services_release_step_bottom_text">
- <div />Детальну <i>інструкцію</i> його використання. Та повний{" "}
- <i>контроль</i> за всіма його функціями.
- </div>
- <div className="d_our_services_release_step_right_window">
- <div className="left_count_window_pseudo_before" />
- <div className="left_count_window_pseudo_after" />
- <span>0</span>
- <span>1</span>
- <span>2</span>
- <span>3</span>
- <span>4</span>
- <span>5</span>
- <span>6</span>
- <span>7</span>
- <span>8</span>
- <span>9</span>
- <span>0</span>
- <span>1</span>
- <span>2</span>
- </div>
- <div className="d_our_services_release_step_right_text">
- <strong>Підтримка</strong>
- <p>
- Ми дбаємо про Ваш проект і після його реалізації - через
- сервіс
- </p>
- <i>технічного обслуговування.</i>
- </div>
- <div className="d_our_services_dev_step_bottom_nav_cont">
- <h3>Скільки коштуватиме мій проект?</h3>
- <button className='d_our_services_change_page_button' onClick={this.toLastStep}>Дізнатися вартість!</button>
- <div className="d_our_services_dev_step_bottom_buttons">
- <button className='d_our_services_change_page_button' onClick={this.releaseStepToPrev}>
- {"<<Повернутись"}
- </button>
- <button className='d_our_services_change_page_button' onClick={this.toLastStep}>
- {"Наступний крок>>"}
- </button>
- </div>
- </div>
- </div>
- <div className="d_our_services_last_step">
- <div className="d_our_services_last_step_header">
- <p>Інформація по виконанню</p>
- <p>
- {
- (this.state && this.state.selected_service) ? `"${this.state.selected_service.title}"` : ''
- }
- </p>
- </div>
- <div className="d_our_services_last_step_cont">
- <div className="d_our_services_last_step_left_block">
- <p>Орієнтовна вартість від:</p>
- <h5>
- {
- (
- this.state &&
- this.state.selected_service &&
- this.state.selected_service.price
- ) ? this.state.selected_service.price + '$' : '??? $'
- }
- </h5>
- {/* <p>Приблизний час виконання:</p>
- <p>
- <i>24 </i>дні.
- </p> */}
- </div>
- <div className="d_our_services_last_step_svg_main">
- <svg viewBox="0 0 190 190">
- <circle fill="#FE5D00" cx="90" cy="70" r="24" />
- <circle
- fill="none"
- cx="90"
- cy="70"
- r="50"
- stroke="#3A3A3A"
- strokeWidth="1"
- />
- <g className='d_equinox_services_planet'>
- <circle fill="#FE5D00" cx="62" cy="29" r="6" />
- <circle
- fill="none"
- cx="62"
- cy="29"
- r="13"
- stroke="#3A3A3A"
- strokeWidth="1"
- />
- <circle className='d_equinox_services_satellite' fill="#909090" cx="50" cy="24" r="3" />
- <polygon className='d_equinox_services_button_play' points="65,29 60,26 60,32" fill="#3A3A3A" />
- </g>
- <a href="mailto:info@equinox.company">
- <text
- x="90"
- y="57"
- className="d_our_services_last_step_text_svg"
- fill="white"
- >
- info@equinox.company
- </text>
- </a>
- <a href="tel:+380961999932">
- <text
- x="90"
- y="72"
- className="d_our_services_last_step_text_svg"
- fill="white"
- >
- +380961999932
- </text>
- </a>
- <a href="/contacts">
- <text
- x="90"
- y="87"
- className="d_our_services_last_step_text_svg"
- fill="white"
- >
- Вул. Воздвиженська 36, Київ, 04071
- </text>
- </a>
- </svg>
- </div>
- <div className="d_our_services_last_step_right_block">
- <h5>Над проектом будуть працювати:</h5>
- {/* <div>
- <span>7 </span>
- <p>дизайнерів</p>
- </div>
- <div>
- <span>5 </span>
- <p>програмістів</p>
- </div>
- <div>
- <span>2 </span>
- <p>Приколіста</p>
- </div>
- <div>
- <span>9 </span>
- <p>СЕО - спеціалісти</p>
- </div> */}
- {
- this.state &&
- this.state.selected_service &&
- this.state.selected_service.executors
- .map(executor => {
- return (
- <div>
- <span>{executor.number}</span>
- <p>{executor.position}</p>
- </div>
- );
- })
- }
- </div>
- </div>
- <div className="d_our_services_last_step_bottom_nav">
- <button>
- <Link to="start-project">Розпочати проект</Link>
- </button>
- <p>Якщо вам цікава більш детальна інформація щодо</p>
- <p>
- Вашого проекту та точніший прорахунок його вартості,
- скористайтеся нашою формою
- </p>
- <p>зворотнього зв'язку.</p>
- <button className='d_our_services_change_page_button' onClick={this.goToRelease}>
- {"<< Повернутись"}
- </button>
- </div>
- </div>
- <Socials />
- </div>
- ) : (
- <React.Fragment>
- <MobileNav />
- <div className="m_our_services">
- <div className="m_our_services_before" />
- <div className="m_our_services_after" />
- <div className="m_our_services_work_step">
- <h1 className="m_our_services__header head_text_theme">
- Як це працює?
- </h1>
- <p className="m_our_services_head_text m_our_services_small_grey_text">
- Приблизну вартість та час виконання саме Вашого проекту можна
- дізнатися саме тут!
- </p>
- <strong className="m_our_services_head_strong m_our_services_strong_white_text">
- Реалізація всіх робіт у
- </strong>
- <div className="m_our_services_orange_number">3</div>
- <strong className="m_our_services_head_strong m_our_services_strong_white_text">
- кроки.
- </strong>
- <div className="m_our_services_work_bottom_text m_our_services_medium_white_text">
- Виконання Вашого замовлення
- <br />
- відбувається за чіткою відпрацьованою
- <br />
- схемою, без збоїв та затримок.
- </div>
- <div className="m_our_services_constituent_step">
- <div className="m_our_services_first_count m_our_services_big_number">
- 1
- </div>
- <div className="m_our_services_constituent_text">
- <div className="m_our_services_constituent_head head_text_theme">
- Установчий етап
- </div>
- <p className=" m_our_services_small_grey_text">
- <i className="m_our_services_medium_white_text">
- Обговорення{" "}
- </i>
- всіх вимог, планів, ідей та пропозицій для максимального
- взаєморозуміння
- </p>
- <p className=" m_our_services_small_grey_text">
- <i className="m_our_services_medium_white_text">
- Формування прайсу{" "}
- </i>
- на основі погодження позицій обох сторін.
- </p>
- <p className=" m_our_services_small_grey_text">
- <i className="m_our_services_medium_white_text">
- Підписання договору
- </i>{" "}
- - <br />
- старт плідної співпраці.
- </p>
- </div>
- </div>
- <div className="m_our_services_dev_step">
- <div className="m_our_services_second_count m_our_services_big_number">
- 2
- </div>
- <div className="m_our_services_dev_text">
- <div className="m_our_services_dev_head head_text_theme">
- Этап розробки
- </div>
- <div>
- <i className="m_our_services_medium_white_text">
- Узгодження фінального ТЗ
- </i>
- <p className="m_our_services_small_grey_text m_our_services_none_margin">
- окреслення Вашого майбутнього проекту.
- </p>
- </div>
- <p className="m_our_services_small_grey_text">
- <i className="m_our_services_medium_white_text">
- 30% передплати{" "}
- </i>
- куди ж без цього.
- </p>
- <div className="m_our_services_small_grey_text">
- <i className="m_our_services_medium_white_text">
- Безпосередній процес розробки
- </i>
- <p className="m_our_services_small_grey_text m_our_services_none_margin">
- який передбачає реалізацію всіх Ваших побажань.
- </p>
- </div>
- </div>
- <svg viewBox="0 0 40 10" width="100vw">
- <circle fill="white" cx="32" cy="2" r="0.7" />
- <line
- x1="32"
- y1="2"
- x2="29"
- y2="9"
- stroke="white"
- strokeWidth="0.3"
- />
- <line
- x1="29"
- y1="9"
- x2="6"
- y2="9"
- stroke="white"
- strokeWidth="0.3"
- />
- </svg>
- <ul className="m_our_services_dev_step_list">
- <li className="m_our_services_medium_white_text">
- <div className="m_our_services_orange_circle" />
- Допускається внесення правок 3 рази.
- </li>
- <li className="m_our_services_medium_white_text">
- <div className="m_our_services_orange_circle" />
- Повний контроль за процесом розробки через наш клієнтський
- додаток
- </li>
- </ul>
- </div>
- <div className="m_our_services_release_step">
- <div className="m_our_services_third_count m_our_services_big_number">
- 3
- </div>
- <div className="m_our_services_release_head head_text_theme">
- Реліз та обслуговування
- </div>
- <div className="m_our_services_release_text">
- <strong>Ви отримуєте готовий продукт</strong>
- <div className="m_our_services_small_grey_text">
- <div className="m_our_services_orange_circle" />
- Детальну <i>інструкцію</i> його використання.
- </div>
- <div className="m_our_services_small_grey_text">
- <div className="m_our_services_orange_circle" />
- Та повний <i>контроль</i> за всіма його функціями.
- </div>
- <div className="m_our_services_release_margin_block">
- <strong>Підтримка</strong>
- <div className="m_our_services_small_grey_text">
- <div className="m_our_services_orange_circle" />
- Ми дбаємо про Ваш проект і після його реалізації - через
- сервіс <i>технічного обслуговування.</i>
- </div>
- </div>
- </div>
- </div>
- <div className="m_our_services_cost_step">
- <div className="m_our_services_cost_head head_text_theme">
- Визначимо ціну!?
- </div>
- <div className="m_our_services_details">
- <p className="m_our_services_small_grey_text">
- Інформація по виконанню
- </p>
- <div>
- {
- (this.state && this.state.selected_service) ? `"${this.state.selected_service.title}"` : ''
- }
- </div>
- <div className="m_our_services_details_cost">
- <span>Орієнтовна вартість від:</span>
- <span>
- {
- (
- this.state &&
- this.state.selected_service &&
- this.state.selected_service.price
- ) ? this.state.selected_service.price + '$' : '??? $'
- }
- </span>
- </div>
- {/* <div className="m_our_services_details_time">
- <span>Приблизний час виконання:</span>
- <span>
- <span>24</span>
- <span>дні</span>
- </span>
- </div> */}
- <p>Над проектом будуть працювати:</p>
- <div
- className="m_our_services_details_workers"
- id="m_workers"
- >
- {/* <div className="m_our_services_details_workers_item">
- <div>7</div>
- <div>Дизайнерів</div>
- </div>
- <div className="m_our_services_details_workers_item">
- <div>5</div>
- <div>Програмістів</div>
- </div>
- <div className="m_our_services_details_workers_item">
- <div>2</div>
- <div>Приколіста</div>
- </div>
- <div className="m_our_services_details_workers_item">
- <div>9</div>
- <div>СЕО - спеціалістів</div>
- </div>
- <div className="m_our_services_details_workers_item">
- <div>3</div>
- <div>програмісти</div>
- </div> */}
- {
- this.state &&
- this.state.selected_service &&
- this.state.selected_service.executors
- .map(executor => {
- return (
- <div className="m_our_services_details_workers_item">
- <div>{executor.number}</div>
- <div>{executor.position}</div>
- </div>
- );
- })
- }
- </div>
- </div>
- <div className="m_our_services_price_list">
- <div className="m_our_services_categories">
- <div
- className="m_our_services_digital_button active"
- onClick={this.showDigitalList}
- >
- Digital studio
- </div>
- <div
- className="m_our_services_branding_button"
- onClick={this.showBrandingList}
- >
- Branding studio
- </div>
- </div>
- <div className="m_our_services_digital_list m_our_services_scrollbar_item">
- {/* <div onClick={this.toDetails}>
- <span className="m_our_services_orange_circle" />
- ПослугаПослуга
- </div>
- <div onClick={this.toDetails}>
- <span className="m_our_services_orange_circle" />
- ПослугаПослуга
- </div> */}
- {
- this.state &&
- this.state.services &&
- this.getSubServicesOf(this.state.services[1])
- .map(service => {
- return (<div onClick={this.handleMobileServiceClick}>
- <span className="m_our_services_orange_circle" />
- {service.title}
- </div>);
- })
- }
- </div>
- <div className="m_our_services_branding_list m_our_services_scrollbar_item">
- {
- this.state &&
- this.state.services &&
- this.getSubServicesOf(this.state.services[0])
- .map(service => {
- return (<div onClick={this.handleMobileServiceClick}>
- <span className="m_our_services_orange_circle" />
- {service.title}
- </div>);
- })
- }
- </div>
- <div className="m_our_services_price_triangle" />
- </div>
- <p className="m_our_services_cost_after_head m_our_services_medium_white_text">
- Оберіть послугу, яка вас цікавить
- </p>
- <button
- className="m_our_services_button"
- onClick={this.toggleMobilePriceList}
- >
- <img src={Minus} />
- <img src={Plus} />
- <span className="m_our_services_list_services">
- Перелік послуг
- </span>
- <span className="m_our_services_another_services">
- Обрати іншу послугу
- </span>
- </button>
- <div className="m_our_services_cost_main_text m_our_services_medium_white_text">
- <p>
- Якщо вам цікава більш детальна інформація щодо Вашого
- проекту та точніший прорахунок його вартості,
- скористайтеся нашою формою
- </p>
- </div>
- <button className="m_our_services_button">
- <Link to="start-project">Розпочати проект</Link>
- </button>
- <div className="m_our_services_circle_svg">
- <svg viewBox="0 0 100 135">
- <circle fill="#FE5D00" cx="50" cy="60" r="14" />
- <circle
- fill="none"
- cx="50"
- cy="60"
- r="42"
- stroke="#3A3A3A"
- strokeWidth="0.7"
- />
- <g class='m_equinox_services_planet'>
- <circle fill="#FE5D00" cx="30" cy="23" r="5" />
- <circle
- fill="none"
- cx="30"
- cy="23"
- r="10"
- stroke="#3A3A3A"
- strokeWidth="0.7"
- />
- <circle className='m_equinox_services_satellite' fill="#909090" cx="20" cy="21" r="3" />
- <polygon class='m_equinox_services_button_play' points="29,21 29,25 32,23" fill="#3A3A3A" />
- </g>
- <text
- x="50"
- y="50"
- className="m_our_services_last_step_text_svg"
- fill="white"
- >
- <a href="mailto:>info@equinox.company">
- info@equinox.company
- </a>
- </text>
- <text
- x="50"
- y="60"
- className="m_our_services_last_step_text_svg"
- fill="white"
- >
- <a href="tel:+380961999932">+380961999932</a>
- </text>
- <a href="/contacts">
- <text
- x="50"
- y="70"
- className="m_our_services_last_step_text_svg"
- fill="white"
- >
- Вул. Воздвиженська 36, Київ, 04071
- </text>
- </a>
- <text
- x="50"
- y="95"
- className="m_our_services_last_step_text_svg"
- fill="#FE5D00"
- >
- Відео про нас
- </text>
- </svg>
- </div>
- </div>
- </div>
- </div>
- <div className="m_our_services_after" />
- <div className="m_our_services_anchors m_our_services_small_grey_text">
- <div
- className="active"
- onClick={() => {
- this.scrollTo(400);
- }}
- >
- Установчий етап
- </div>
- <div
- onClick={() => {
- this.scrollTo(800);
- }}
- >
- Розробка
- </div>
- <div
- onClick={() => {
- this.scrollTo(1400);
- }}
- >
- Реліз
- </div>
- <div
- onClick={() => {
- this.scrollTo(1900);
- }}
- >
- Вартість
- </div>
- <Link to="/">
- {" "}
- <img src={Exit} alt="exit" />
- </Link>
- </div>
- </React.Fragment>
- )}
- </div>
- );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement